Nano Hash - криптовалюты, майнинг, программирование

Как добавить вкладку (или другой) компонент пользовательского интерфейса с помощью Aurelia

Я пытаюсь интегрировать некоторые компоненты пользовательского интерфейса на основе jQuery в приложение Aurelia (в частности, компонент вкладки). Я пробовал jQWidgets и EasyUI, и у каждого из них была одна и та же проблема. Оба они работают практически одинаково: вы создаете несколько элементов div, которые представляют ваши вкладки, а затем вызываете такой метод, как $('#divTabs').tabs().

Я создал пользовательский элемент следующим образом:

@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(), потому что плагин уже испортил div (обернул их в другие div, добавил классы и т. д.) в первый раз.
Вот плункер, который показывает проблему.

Я иду об этом неправильно? Есть ли способ заставить мой элемент перезагружаться при изменении связанного массива?


  • вы делаете элемент правильным членом класса, так почему бы вам просто не вызвать $(this.element).tabs() после того, как вы назначите новых пользователей пользователям-членам класса 04.03.2016
  • Потому что структура DOM на тот момент уже испорчена с первого вызова $(this.element).tabs(), и плагин задыхается. 04.03.2016

Ответы:


1

После того, как я разместил свой вопрос, я начал читать о возможностях улучшения Aurelia, и я думаю, что это ответ на мою проблему. Это позволяет мне управлять созданием вкладок в коде, а не в разметке (что, как мне кажется, в любом случае предпочтительнее).

Мой пользовательский вид элемента теперь в основном пуст (за исключением пустого div, который требуется для плагина пользовательского интерфейса). Я подключаюсь к событию itemsChanged и создаю там вкладки:

itemsChanged(newValue, oldValue){
    //semi-pseudo code here
    //clear out existing tabs
    $('#divTabs').tabs('clear');        

    //loop through item array and create a tab for each item    
    newValue.forEach(item => {
        $('#divTabs').tabs('addLast', item.ComponentTitle, '<div id="' + item.ComponentTitle + '"><compose view-model="component/' + item.ComponentName + '"></compose></div>');
        let el = document.querySelector('#' + item.ComponentTitle);
        this.templatingEngine.enhance({element: el});
    });
}

При дальнейшем рассмотрении это похоже на то, как работает пользовательский интерфейс кендо. Мост работает, что заставляет меня думать, что это правильный путь. Большое спасибо за этот пост за то, что пролил свет на эту функцию.

05.03.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..