Использование Aurelia Я борется со связыванием и повторением. For: Предположим, у меня есть в моей модели просмотра с меню свойствItems (массив MenuItem
) I хотел бы повторить пункты меню с помощью пользовательского шаблона:Каков правильный способ в aurelia привязываться к пользовательскому элементу с помощью repeat.for
export class App {
menuItems : MenuItem[];
}
export class MenuItem{
label:string;
}
в шаблоне приложения я использую использовать специальный элемент
<require from="./menu-item"></require>
<ul>
<menu-item repeat.for="item of menuItems"></menu-item>
</ul>
мой пользовательский шаблон (меню item.html):
<template>
<li>${label}</li>
</template>
Каков правильный способ привязки шаблона или доступа к связанным с ним MenuItem?
Я пробовал следующее: ${label}
и ${item.label}
, но это не работает. Я вижу в обратном вызове bind(bindingContext)
, что bindingContext имеет свойство «item»: bindingContext.item
, который является связанным с MenuItem.
Я также пытался создать связываемый атрибут класса MenuItem:
export class MenuItem{
@bindable current any;
label:string;
}
и следующий ретранслятор:
<menu-item repeat.for="item of menuItems" current.bind="item"></menu-item>
и соответствующего шаблон
<template>
<li>${current.label}</li>
</template>
примечание: см отредактируйте 1 ниже, для моего комментария к этой точке в коде.
Этот подход также не работает.
Другие исследования, которые не были использованы с использованием специального элемента (работающего), с использованием <compose view-model='MenuItem', model.bind='item'/>
, также не работают в этом примере и будут разработаны, я думаю.
Рабочий раствор, смотри также Aurelia repeat.for binding on a custom element :
повтора и связываются на пользовательский атрибут шаблона и ViewModel класса:
<menu-item repeat.for="item of menuItems" current.bind="item" containerless></menu-item>
Класс ViewModel:
import {bindable, customElement} from 'aurelia-framework'
@customElement('menu-item')
export class MenuItem{
label = "default label";
@bindable current;
constructor(label){
this.label = label;
}
attached(){
console.log("MenuItem = attached");
}
}
Редактировать 1 :
Я вижу в t он выводит html шаблонов, повторяющихся для многих, есть MenuItems. Но эти предметы не связаны: <li>
пуст. Я ожидал увидеть ярлыки.
Edit 2:
в этом посте я напечатал «пунктов в MenuItems», это не исправить это должно быть «пункт MenuItems».Но это не было причиной моего Борясь, я его неправильно набранный в этом посте только
Edit 3:
@ Jeremy-danyow предположил, что
- HTML должны быть хорошо сформированы: меню -item внутри ul неверно (с использованием атрибута
containerless
помогает удалить элемент элемента меню) - Пользовательские элементы всегда должны иметь закрывающий тег Я адаптировал код. Также я сделал plunker: Aurelia repeat.for binding on a custom element
Это plunker работы, при условии, атрибут @bindable
;
Ваше предложение о хорошо структурированном html полезно и точно. В моем реальном приложении я использую атрибут без контейнера или декоратор @containerless(). Также необходимо знать требование настраиваемого элемента, требующего закрывающего тега. Я отредактирую вопрос. Но обязательный вопрос остается открытым. Не могли бы вы сказать что-нибудь об этом? – Arjan