Передать функцию обратного вызова полимерному элементу

Я хочу передать ссылку на функцию/метод, используя привязку шаблона. Должно ли это работать? Что я делаю не так?

index.dart

@observable
class Model() {
  onSignOutCallback(message) {
    print(message);
  }
}

main() {
  query("#tmpl").xtag.model = new Model(); 
  TemplateElement t = query("#plus-login-tmpl") as TemplateElement;
  t.bindingDelegate = new PolymerExpressions();
}

index.html

... ...

мой_компонент.html

<polymer-element name="my-component" attributes="sign-out-callback">
  <button on-click="{{signOutCallback}}>Sign out</span>
</polymer-element>

мой_компонент.dart

typedef void OnSignOutCallback(message);

@CustomTag("my-component")
class MyComponent extends PolymerElement with ObservableMixin {
  OnSignOutCallback onSignOutCallback;

  @override
  inserted() {
    super.inserted();
    onSignOutCallback("signed out"); // test if value was assigned        
  }
}

person Günter Zöchbauer    schedule 31.08.2013    source источник
comment
Какие ошибки вы видите?   -  person Seth Ladd    schedule 31.08.2013
comment
Я не получаю ошибку, но ничего не назначается. Я отредактировал вопрос. Как кажется, шаблону должно быть назначено PolymerExpression, и, что более странно, поддерживаются только методы с ровно одним параметром без аннотации типа. Код, который сейчас написан в моем вопросе, работает. Это намеренно поддерживается только эта форма или это ошибка?   -  person Günter Zöchbauer    schedule 31.08.2013


Ответы (1)


Мне пришлось изменить модель следующим образом

class Model() {
  var onSignOutCallback;

  Model(){
    onsignOutCallback = signOutCallback;
  }

  signOutCallback(message) {
    print(message);
  }
}

Кажется, что в настоящее время невозможно напрямую ссылаться на методы в HTML, как это делается внутри элемента Polymer. Однако назначение метода полю в модели и ссылка на поле в HTML работают.

person Günter Zöchbauer    schedule 19.09.2013