Javascript 如何生成观察块

Javascript 如何生成观察块,javascript,polymer,Javascript,Polymer,我希望生成观察块,如下所示: created: function () { var viewData = { type: 'Pikachu', name: 'Gary' }; // iterate over view data for (prop in viewData) { //set

我希望生成观察块,如下所示:

        created: function () {
            var viewData = {
                type: 'Pikachu',
                name: 'Gary'
            };

            // iterate over view data
            for (prop in viewData) {
                //set the property
                this[prop] = viewData[prop];


                var handlerName = 'update' + prop

                // set add the property to the observe block
                this.observe[prop] = handlerName;

                // set the handler
                this[handlerName] = function (valueWas, valueIs) {
                    console.log('you have changed ' + prop + ' to ' valueIs);
                };
            }
        },
这可能吗


这对我来说完全没有反应,没有错误,但是没有调用处理程序。

您缺少一些奥秘。在完成原型之前,
聚合物元素
代码将
观察
映射分解为并行阵列,作为(非常烦人的)速度优化

您可以通过调用以下命令重新优化实例:

this.element.optimizePropertyMaps(this)

其中
this.element
指定义当前元素类型的
聚合物元素(fwiw,已知
element
是该属性的坏名称)

以下是一个例子:

同样在性能方面,Polymer将观察员和其他特殊列表视为共享原型的特征。因为您的动态数据可能是每个实例的,所以我必须使您的示例更加复杂,以便进行适当的测试


注意,由于破坏聚合物的每一原型预期,可能还有其他复杂情况。

我也无法获得动态
属性更改
处理程序:我怀疑发生的是聚合物的内部需要
观察
块和
更改的
处理程序信息,以便从中创建映射属性设置为处理程序。但在理论上,我觉得这应该行得通。你介意提交一个bug()吗?谢谢你的关注。我认为聚合物需要预先安装观察块。我已经提交了这个问题()。哦,是的,我们应该停止称它为
observe block
,因为它会惹恼JavaScript语言律师。它实际上是一个
对象
是一种代码构造(它也使用
{}
,fwiw)。这整件事可能都是我的错,因为我一开始就把它叫做
。)