[英]Ember.js: let component observe value changes of store items
我剛剛開始使用Ember,遇到了以下問題。 我想觀察商店中某項商品的價值是否發生了變化。 據我了解,這就是@each指令的作用。 不幸的是,這不會觸發組件中的相應方法。
我的代碼結構如下。 當前路線返回了我的商店的子集,並且具有更改其中一項的動作。
export default Ember.Route.extend({
model: function() {
this.store.push('node', {id: 1, x: 40, y:40});
this.store.push('node', {id: 3, x: 50, y:50});
return this.store.findAll("node");
},
actions: {
move: function(x, y) {
this.store.findRecord('node', 1).then(
function(v) {
v.set("x", x); v.set("y", y);
});
}
}
});
我通過模板指令將模型傳遞給組件。
{{node-comp data=model}}
現在,當模型中的值發生更改時(例如,在我的示例中,調用了“移動”動作),我想在組件內獲得通知。 我當前的方法如下所示:
export default Ember.Component.extend({
rerender: function() {
console.log("rerender called");
}.observes("data.@each")
};
我也嘗試了'data。[]'指令和'data。@ each.x'指令。 但是沒有什么能導致期望的行為。 請注意,組件模板已通知,即,模型的項目列表在“移動”調用后得到更新。
我的'ember -v'輸出
未來版本的Ember CLI將不支持v4.2.0。 請更新到Node 0.12或io.js。 版本:1.13.8找不到監視程序,回退到NodeWatcher進行文件系統事件。 有關詳細信息,請訪問http://www.ember-cli.com/user-guide/#watchman 。 節點:4.2.0 npm:2.13.4 os:Linux x64
您可以嘗試使用“ hasDirtyAttributes”屬性。 但是,我不確定在推{x:1}之類的對象時是否適用。 為什么不使用store.createRecord('node',{x:1})等
http://emberjs.com/api/data/classes/DS.Model.html#property_hasDirtyAttributes
rerender: function() {
console.log("rerender called");
}.observes("data.@each.hasDirtyAttributes")
注意! 這不適用於異步關系
順便說一句,這種重新渲染看起來很奇怪。
您的組件包含什么? 在更改模型后,它看起來確實很奇怪,可以在組件中直接綁定模型值。 組件/file.js
{{#each data as |node|}}
{{node.x}} < changes when node changes
{{/each}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.