在Polymer.dart中是否必须支持Mustache-Binding?

时间:2014-06-13 11:03:49

标签: dart dart-polymer

迫切地说,我无法在fusion.dart组件中使用胡子绑定:

...
@observable String data = "testData";
...
ready() {
  Element container = this.shadowRoot.querySelector("#container");    
  DocumentFragment newFragement = this.createFragment("<sample-element myAttribute='{{data}}'></sample-element>");
  container.nodes.add(newFragement);
}

胡子绑定没有被解释,我发现这是一个解决方法,但我不知道这是否是首选的方法,而且缺点是我不能强制使用胡子绑定:

Element newElement = new Element.tag("sample-element");
nodeBind(newElement).bind("myAttribute", new PathObserver(this, "data"));
container.nodes.add(newElement);

欢迎任何想法! : - )

2 个答案:

答案 0 :(得分:1)

我找到了另一种方法,在执行this.createFragment()时,我可以使用template-tag包装HTML并对此元素执行templateBind()。 现在,Mustache-Binding也在命令式创建的HTML节点上进行解释。 ;)

最诚挚的问候,希尔玛

答案 1 :(得分:1)

Polymer.dart有一段时间injectBoundHtml()

<div id="container"></div>

...

this.injectBoundHtml('<foo-bar baz="{{qux}}"></foo-bar>', this.$['container']);

另见https://stackoverflow.com/a/25982843/217408

原始

Justin Fagnani提供了一种解决方法https://groups.google.com/a/dartlang.org/d/msg/web/DYD1NA-SH0A/h-hSU3J8nDYJ

另请参阅此问题https://code.google.com/p/dart/issues/detail?id=19875

  

是的,问题是所有这些绑定和PathObservers实际上是反射性的。我们使用smoke作为实现反射API的库。当您在Dartium中运行时,此API使用dart:mirrors实现,但是当您使用聚合物变换器构建应用程序时,我们将生成的代码替换为使用镜像来帮助dart2j优化您的应用程序。

     

为了生成我们需要的代码,聚合物变换器会解析您的应用并发现模板中的每个表达式等。 Dart代码中的表达式(如上例所示)未被发现,因此我们不知道如何为它们生成代码。这基本上就是#commands或#save没有条目的原因。

     

将来我想添加一个添加你自己的变压器阶段的选项,告诉烟雾生成一些额外的符号等等,但是现在还没有。

     

同时,解决此问题的最佳方法是确保HTML模板中的某些符号被提及。应该足以定义一个聚合物元素元素,其模板使用这些符号(即使元素不在任何地方使用)。