【问题标题】:Is imperative Mustache-Binding in Polymer.dart supported?Polymer.dart 中的命令式 Mustache-Binding 是否支持?
【发布时间】:2014-06-13 11:03:48
【问题描述】:

当务之急,我无法让小胡子绑定在 polymer.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);

欢迎任何想法! :-)

【问题讨论】:

标签: dart dart-polymer


【解决方案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 实现的,但是当您使用聚合物转换器构建应用程序时,我们会使用生成的代码替换镜像,以帮助 dart2js 优化您的应用程序。

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

将来我想添加添加您自己的变压器阶段的选项,告诉烟雾生成一些额外的符号等,但今天不可用。

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

【讨论】:

    【解决方案2】:

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

    最好的问候,希尔玛

    【讨论】:

    • 它似乎只适用于原始绑定,模板重复结构似乎不起作用;(
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2014-01-11
    • 1970-01-01
    • 2020-05-02
    • 2019-03-26
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多