Javascript Google聚合物与子属性的结合

Javascript Google聚合物与子属性的结合,javascript,polymer,polymer-1.0,Javascript,Polymer,Polymer 1.0,是否可以使用Google Polymer自动绑定子属性?类似AngularJS的东西 下面是一个小例子: 此元素包含属性prop1,并在2秒后更新: <dom-module is="test-elem"> <script> TestElem = Polymer({ is: "test-elem", properties: { prop1: { type: Strin

是否可以使用Google Polymer自动绑定子属性?类似AngularJS的东西

下面是一个小例子:

此元素包含属性prop1,并在2秒后更新:

<dom-module is="test-elem">

    <script>
        TestElem = Polymer({
            is: "test-elem",

            properties: {
                prop1: { type: String, value: "original value", notify: true }
            },

            factoryImpl: function() {
                var that = this;

                setTimeout(function(){
                    that.prop1 = "new value";
                }, 2000);
            }
        });
    </script>

</dom-module>

TestElem=聚合物({
是:“测试元素”,
特性:{
prop1:{type:String,value:“原始值”,notify:true}
},
factoryImpl:function(){
var=这个;
setTimeout(函数(){
that.prop1=“新值”;
}, 2000);
}
});
这是主页面,它创建一个元素并在dom中显示prop1

<template is="dom-bind" id="main-page">

    <span>{{test.prop1}}</span>

</template>

<script>
    var scope = document.getElementById('main-page');

    var t = new TestElem();

    scope.test = t;

</script>

{{test.prop1}}
var scope=document.getElementById('main-page');
var t=新的TestElem();
scope.test=t;
不幸的是,页面没有用新值更新。 有没有办法自动绑定这个


下面是一个JSFIDLE:

我发现的最简单的方法是添加一个事件处理程序:

t.addEventListener('prop1-changed', function(e){
        scope.notifyPath('test.prop1', e.currentTarget.prop1)
});


但是它不像AngularJS那样是自动的。

我无法解释原因,但是将示例从setTimeout切换到this.async可以使它工作。

将其绑定为页面范围的子属性不会自动工作,因为您需要在绑定范围上手动调用notifyPath('test.prop1',value)。一种方法是将绑定范围传递给TestElem构造函数。请注意,如果自动绑定到父元素,则无需担心此问题。在后一种情况下,更新是自动的

下面介绍了两个绑定和更新方法。一个是自动的,另一个需要对传递给构造函数的绑定范围进行notifyPath调用

  TestElem = Polymer({
    is: "test-elem",

    properties: {
      prop1: {
        type: String,
        value: "original value",
        notify: true
      }
    },

    ready: function() {
      var that = this;
      setTimeout(function () {
        that.prop1 = "new value (via ready)";
      }, 2000);
    },

    factoryImpl: function (app) {
      setTimeout(function () {
        app.notifyPath('test.prop1', 'new value (via app scope)');
      }, 2000);
    }
  });
。。然后通过以下两种方式之一引用元素:

  <test-elem prop1="{{prop1value}}">{{prop1value}}</test-elem>
  <div>{{test.prop1}}</div>
  <script>
    app.test = new TestElem(app);
  </script>

我猜是因为性能原因。“由于我们避免使用更复杂的观察机制,如Object.observe或dirty Check,以便在最常见的用例中跨平台获得最佳启动和运行时性能,因此直接更改对象的子属性需要用户的合作。”您能提供JSFIDLE吗?因为它似乎对我不起作用:对不起,您没有正确使用异步函数。test-elem.prop1最初只显示在主页面上,后续的test-elem.prop1更改不会更新主页面。后续更新时,您必须调用notifyPath。
new value (via ready)
new value (via app scope)