Ember.js 余烬:model.set vs store.update

Ember.js 余烬:model.set vs store.update,ember.js,ember-data,Ember.js,Ember Data,我很好奇model.set('propertyName',propertyValue)与store.update('modelType',{id:1,propertyName:propertyValue})有何不同 一些上下文:在我的应用程序中,您单击一个按钮来运行后台任务,一旦完成,我的应用程序将使用ajax从数据库中获取数据。数据更新后,显示数据的组件将更新并显示新数据 后台任务完成后,我尝试在控制器中执行以下操作: var self = this; return Ember.$.get('

我很好奇
model.set('propertyName',propertyValue)
store.update('modelType',{id:1,propertyName:propertyValue})有何不同

一些上下文:在我的应用程序中,您单击一个按钮来运行后台任务,一旦完成,我的应用程序将使用ajax从数据库中获取数据。数据更新后,显示数据的组件将更新并显示新数据

后台任务完成后,我尝试在控制器中执行以下操作:

var self = this;
return Ember.$.get('someURL').done(function(data) {
    // This deserializes the data so all attribute names are camelCase
    data = deserializeData(data) 
    // At this point, data = {id: 1, attrOne: "valueOne", attrTwo: "valueTwo"}
    self.store.update('modelName', data);
});
不幸的是,这不会触发视图中的任何更新,因此我的组件不会反映新数据。事实上,当我尝试执行
this.get('model.attrOne')
时,它会返回模型的旧数据

然后我尝试了以下方法:

var self = this;
this.store.findById('modelName', modelId).then(function(model) {
    return Ember.$.get('someURL').done(function(data) {
        // This deserializes the data so all attribute names are camelCase
        data = deserializeData(data) 
        // At this point, data = {id: 1, attrOne: "valueOne", attrTwo: "valueTwo"}
        model.setProperties(data)
    });
});
现在,当我这样做时,一切都按预期进行,视图会正确地使用新数据进行更新


我不明白的是,为什么后一种方式有效而前一种方式无效?

您确定您的id字段正确吗?如果是的话,你可以发布一个jsbin吗?使用store.update不应该传播更改。这里有一个开始的余烬数据jsbin->你是说应该传播吗?我在id字段上遵循了ember数据文档示例,不过在我的应用程序中,我没有使用整数id,而是使用UUID(表示为字符串)。但希望这仍能像预期的那样起作用。然而,我无法在第一次尝试时在jsbin中重新创建错误,尽管我没有使用ember组件,所以让我在工作后尝试一下,然后再与您联系。