簡體   English   中英

Ember.js:讓組件觀察商店商品的價值變化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM