Я пытаюсь интегрировать некоторые компоненты пользовательского интерфейса на основе jQuery в приложение Aurelia (в частности, компонент табуляции). Я пробовал jQWidgets и EasyUI и имел такую же проблему с каждым. Оба они работают по существу одинаково: вы создаете некоторые div, которые представляют ваши вкладки, а затем вызывают метод, подобный $('#divTabs').tabs()
.Как добавить вкладку (или другой) компонент пользовательского интерфейса с Aurelia
Я создал пользовательский элемент, как это:
@customElement('tabs-element')
@inject(Element)
export class Tabs{
@bindable items;
@bindable areaId;
constructor(element) {
this.element = element;
}
attached(){
$(this.element).tabs();
}
}
с тем, как это:
<template>
<div id.bind="areaId">
<div repeat.for="item of items" title.bind="item.id">
${item.username}
<!-- Eventually I want to use "compose" here ->
<!--<compose view-model="component/${item.name}"></compose>-->
</div>
</div>
</template>
я затем использовать этот элемент в моем главном экране, как это (где users
является массив объектов, извлеченных с сервера):
<tabs-element area-id="TopArea" items.bind="users"></tabs-element>
Это прекрасно работает, когда сначала загружаются страницы, но когда новые данные впоследствии извлекаются, я не могу воссоздать вкладки. repeat.for
от Aurelia обновляет DOM новыми элементами, но я не могу снова позвонить $('#divTabs').tabs()
, потому что плагин уже сбрасывал с divs (завернул их в другие divs, добавленные классы и т. Д.) В первый раз.
Here's a plunker, что указывает на проблему.
Я иду об этом неправильно? Есть ли способ заставить мой элемент перезагружаться при изменении связанного массива?
вы делаете элемент как член класса прав, поэтому почему бы вам просто не называть '$ (this.element) .tabs()' после того, как вы назначили новых пользователей пользователям-членам класса. –
Поскольку структура DOM в этот момент уже перепутался с первым вызовом '$ (this.element) .tabs()', и плагин захлопывает. – Jerrad