Лучший способ получить модель, связанную с элементом основного элемента?

Рассмотрим этот фрагмент полимера:

<core-menu on-core-activate="{{selectUser}}">
  <template repeat="{{user in users}}">
    <core-item label="{{user.name}}"></core-item>
  </template>
</core-menu>

Когда пользователь щелкает элемент core-item и вызывает selectUser, как определить, какой пользователь связан с активированным core-item? Я хотел бы получить экземпляр фактического объекта, а не какой-то строковый идентификатор, который я бы использовал для поиска объекта.


person ALW    schedule 07.10.2014    source источник


Ответы (1)


Полимер >= 1.0.0

@reflectable
void someClickHandler(dom.Event event, [_]) {
  // for native events (like on-click)
  var model = new DomRepeatModel.fromEvent(event);
  // or for custom events (like on-tap, works also for native events)
  var model = new DomRepeatModel.fromEvent(convertToJs(event));
  var value = model.jsElement['items']; 
  // or 
  var value = model.jsElement[$['mylist'].attributes['as']];
  // if you used the `as="somename"` 
  // in your <core-list> or <template is="dom-repeat">
}

Существует открытый вопрос, связанный с пользовательскими событиями: https://github.com/dart-lang/polymer-dart/issues/624

Полимер ‹= 0,16,0

В обработчике кликов

import 'package:template_binding/template_binding.dart' as tb;

...

void onClick(MouseEvent e) {
  tb.TemplateInstance ti = tb.nodeBind(e.target).templateInstance; 
  var value = ti.model.value as Inner;
}

см. В Polymer.js дочерние элементы шаблона имеют ссылку на шаблон, как это можно сделать в Polymer.dart для более подробной информации. .

person Günter Zöchbauer    schedule 07.10.2014
comment
Человек, который кажется неуклюжим. Есть ли другой способ? :/ - person ALW; 07.10.2014
comment
Не думайте так. Вы можете сократить его до одной строки (без импорта). Некоторые вещи в Dart не так просты, как в JS… - person Günter Zöchbauer; 07.10.2014
comment
Я думаю, это действительно единственный способ... довольно слабый, но пока сойдет. - person ALW; 08.10.2014