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

Отображение кнопок в представлении данных в Sencha 2

Я пытаюсь создать представление, в котором есть список, в котором каждая строка имеет текст и две кнопки, выровненные по правому краю. Текст кнопок всегда будет одним и тем же — из хранилища нужно будет получить только текст строки.

Я видел этот вопрос, но не смог предлагаемое решение не работает. У меня определенно есть записи в моем магазине, но представление данных не отображается.

Упрощенная версия моего кода:

Мое основное представление:

Ext.define('MyApp.view.Main', {
    extend: 'Ext.Container',
    ...
    config: {
        layout: {
            type: 'vbox',
            pack: 'center',
            align: 'middle'
        },
        items: [
           ...
           {xtype: 'mylist'}
           ...
        ]
        ...
    }
    ...
});

Просмотр данных:

Ext.define('MyApp.view.MyList', {
    extend: 'Ext.dataview.DataView',
    alias: 'widget.mylist',
    requires: ...,
    config: {
         useComponents: true,
         store: 'my-store',
         defaultType: 'listitem'
     }
});

Элемент данных:

Ext.define('MyApp.view.ListItem', {
    extend: 'Ext.dataview.component.DataItem',
    alias: 'widget.listitem',
    config: {
        layout: ...
        items: [{
            xtype: 'component',
            itemId: 'description',
            html: '',
            flex: 2
        },
        {
            xtype: 'button',
            text: 'a button',
            itemId: ...,
            flex: ...
         },
         {
             ... another button
         }]
     },
     updateRecord: function(record) {
         ...
         this.down('#description').setHtml(record.get('description'));
         // record.get('description') does give me an undefined value
     }
});

Если предположить, что мои магазины и модели настроены правильно, в чем может быть проблема?

В качестве альтернативы, возможно, мне следует просто использовать стандартный список, но установить ширину ‹100% и просто добавить 2 кнопки справа для каждой строки. Хотя я бы предпочел использовать текущий подход к работе...

Редактировать:
В итоге был использован подход dataMap. Мой DataItem теперь выглядит так:

config: {
    layout: {
        type: 'hbox',
        align: 'center'
    },
    dataMap: {
        getDescription: {
            setHtml: 'description'
        }
    },
    description: {
        flex: 1
    }
},
applyDescription: function(config) {
    return Ext.factory(config, Ext.Component, this.getDescription());
},
updateDescription...

По сути, как это.

Теперь я вижу ярлыки, но не могу понять, как вставить туда кнопку. Поскольку я не хочу связывать его с магазином, я не хочу помещать его в dataMap. Я пытался поставить его в items, но безрезультатно.

Правка 2.
Что ж, сделать так, чтобы кнопка отображалась, оказалось проще, чем я думал. Это просто повтор того, что я сделал с меткой, но без включения в dataMap - yesButton: {...}, applyYesButton: f(){...}, updateYesButton: f(){...}...

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


Ответы:


1

Мое решение для получения кнопки в представлении данных без привязки ее к магазину. На самом деле, что неудивительно, он похож на этот запись в блоге.

просмотр — ListItem.js

...
config: {
    layout: {
       type: 'hbox',
       align: 'center'
    },
    dataMap: {
        getDescription: {
            setHtml: 'description'
        }
    },
    description: {
        cls: ...,
        flex: 4
    },
    myButton: {
        cls: ...,
        text: 'Button!',
        flex: 1
    }
},
applyDescription, updateDescription (same as in the question),
applyMyButton: function(config) {
    return Ext.factory(config, Ext.Button, this.getMyButton());
},
updateMyButton: function(newButton, oldButton) {
    ... same logic as the other update method
}

В моем представлении данных:

...
config: {
    itemId: ...,
    store: ...,
    useComponents: true,
    defaultType: 'listitem',
    width: '100%',
    flex: 1,
    listeners: {
        itemtap: function(dataview, index, element, evt) {
            var store = dataview.getStore();
            var record = store.getAt(index);
            ...
        }
    }
}
...
02.07.2015
Новые материалы

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

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

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

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

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

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

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