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组件,所以让我在工作后尝试一下,然后再与您联系。