Работа с железным списком в дротике Polymer 1.0. Попробуйте реализовать железный список с выбором элемента в списке. Это работает, когда элемент является строкой, но не работает для структурированного типа.Polymer 1.0 - железный список - выбор
При запуске кода нижеприведена следующая распечатка.
>Contains : false
>Uncaught Unhandled exception:
>NoSuchMethodError: method not found: 'shorttext'
>Receiver: Instance of 'JsObjectImpl'
точек останова внутри (objText! = NULL) список "objText-> JavaScriptView->прото> получить/установить shorttext" Close, но предполагая, что-то неправильно с привязкой.
В документации по железным спискам упоминается что-то о том, как положить действие на предмет. Пример JavaScript в документации имеет выбор и использует модель.
https://elements.polymer-project.org/elements/iron-list
Когда верно, нажав строку будет выбрать элемент, помещая его модель данных в наборе выбранных элементов извлекаемых с помощью свойства выбора.
Обратите внимание, что нажатие фокусируемых элементов в элементе списка не приведет к выбору, поскольку предполагается, что они имеют собственное действие.
Хорошо, кто-нибудь был в подобных частях dart-polymer 1.0? Также приветствуются предложения о том, как работать с выбором железного списка?
Html сторона:
<iron-list id="id_list" items="{{listitem}}" as="item" selection-enabled>
<template>
<paper-item on-tap="tap_event">{{item.shorttext}}</paper-item>
</template>
</iron-list>
На Dart стороне:
class ItemText extends JsProxy {
@reflectable
String shorttext;
ItemText(this.shorttext);
}
@PolymerRegister('list-demo')
class ListDemo extends PolymerElement {
@property
List<ItemText> listitem;
@property
int nrelements = 10;
// Constructor used to create instance of MainApp.
ListDemo.created() : super.created(){
List<ItemText> l = [];
for (int i = 0; i < nrelements; ++i){
l.add(new ItemText('Name ' + i.toString()));
}
listitem = l;
print('created : ${$['id_list'].selectionEnabled}');
this.notifyPath('listitem', listitem);
}
@reflectable
void tap_event(event, [_]) {
IronList e = $['id_list'];
Object objText = e.selectedItem;
if (objText != null){
print('Contains : ${listitem.contains(objText)}');
print('The short text : ${objText.shorttext}');
}
}
}
Спасибо, за очень быстрый ответ. Предлагаемое решение работает. 'convertToDart (e.selectedItem);' Делает логическую операцию действительной. Определенно, решение с привязкой к методу selectedItem и @Observe лучше, здесь newValue указывает на правильный элемент в списке и не нуждается в каком-либо преобразовании. Я могу сообщить об исходной проблеме как ошибке или, по крайней мере, немного дополнительной документации по этому вопросу. Что ты предлагаешь? –
Я бы сообщил об ошибке, и команда Polymer решила, как действовать. Если это ответит на ваши вопросы, отметьте это, как указано с помощью галочки под кнопками «вверх», спасибо! –
У вас есть точка. Я сообщу об этом, также в iron_list.dart есть get для selectedItem, поэтому для меня он должен вернуть четко определенный объект Dart. –