3

カスタム要素内に PolymerExpression フィルターを登録するにはどうすればよいですか? Polymer.dart を使用しています。

私はこれを使いたい:

<div>Uppercase: {{bob.fullName | uppercase}}</div>

カスタム要素のテンプレート内。どこで登録しuppercaseますか?

4

3 に答える 3

3

Seth answer を試してみましたが、式自体は機能していますが、どういうわけかコンポーネントのイベントが失われています。以下on-clickを使用していたときに、イベントが機能しなくなりました。

  DocumentFragment instanceTemplate(Element template) =>
      template.createInstance(this,
          new PolymerExpressions(globals: {
            'uppercase': (String input) => input.toUpperCase()
  }));

ポリマー式のページで提案されている解決策も試しましたが、バインディング デリゲートが明らかに欠落しています。新しいバージョンのせいでしょうか。

とにかく、コードを調べた後、式を持ち、イベントを機能させ続ける別の方法を見つけました。

class MyElement extends PolymerElement {

  MainElement.created() : super.created();

  @override
  BindingDelegate syntax = new MyPolymerExpressions();
}

class MyPolymerExpressions extends PolymerExpressions {

  MyPolymerExpressions(): super(globals: {
      'uppercase': (String input) => input.toUpperCase()
  });

  @override
  prepareBinding(String path, name, node) => Polymer.prepareBinding(path, name, node, super.prepareBinding);
}

prepareBindingメソッドがオーバーライドされているイベントが機能していることに気付きました。

誰かがそれを行うためのより良い方法やこれについての考えを持っているなら、私は非常に興味があります!

于 2014-02-20T23:32:45.223 に答える
1

dart-misc に関する議論から、ポリマー式は単一の引数を受け入れる戻り値を探しています。toFixed したがって、パラメーターの例を再現するには、フィルターから関数を返す必要があります。

class MyElement extends PolymerElement {

  MainElement.created() : super.created();

  String toFixed(int digits) => (num n) => n.toStringAsFixed(digits);
}

また、polymer_expressionsパッケージから、式フィルターを使用するためにカスタム バインディング/デリゲートを実行する必要がなくなりました: "Polymer Expressions are now the default syntax for custom elements." 関数ディレクトリを要素に追加して、それをフィルターとして使用できるようです。

于 2014-08-05T21:39:29.620 に答える