2015-04-17 122 views
2

所以我决定尝试使用observers而不是custom events进行通信。删除/禁用聚合物观察员

在我的引导逻辑,我在听一些模型与观测块更新:

observe: { 
    '$.myModel.value': function(){ 
     initLogic(); 
     delete this.observe['$.myModel.value']; 
    } 
}, 

然后我想停下来听,因为这只需要做一次。

是否像删除observe.<whatever>函数(如上所示)或一样简单?我需要更明确与聚合物?

或者我可以用一个承诺,在这种情况下,如果观察者保持触发我不在乎:

var initDeferred = Promise.defer(); 
Polymer('init-logic', { 
    observe: { 
     '$.myModel.value': initDeferred.resolve 
    }, 
    ready: function(){ 
     initDeferred.promise.then(initLogic); 
    } 
}); 

是有到位有不必要的观察员性能影响

回答

1

查看此链接https://www.polymer-project.org/0.5/docs/polymer/binding-types.html#one-time-bindings 我不确定这是否有助于您的情况。

+0

感谢您指出了这一点,我没有注意到,但我不知道如何使用绑定来代替观察者/事件监听器。我也在考虑用[onMutations](https://www.polymer-project.org/0.5/docs/polymer/polymer.html#onMutation)风格的'observeOnce'功能扩展Polymer元素,但这样做会起作用属性而不是DOM子树。 – Renaud

+0

据我所知,myModel需要设置一次,对吧?所以你可以在元素的属性中传递这个myModel的值,但是在你的代码中使用myModel的一个时间绑定语法。虽然,我还没有尝试过一次,但这是我将如何继续。 – Shhhhh

+0

我明白你的意思,但它只适用于原始类型值,不适用于对象或函数。 – Renaud