如何确保从服务器添加响应到ember商店

时间:2014-10-16 12:20:19

标签: javascript jquery ember.js ember-data

我正在使用ember.js进行应用程序的UI端开发。对于每个动作我们都会显示一个模态弹出窗口,我们在弹出窗口中有表单,然后在表单提交时我们有一些具有控制器的相应操作。它的工作正常,如果我们正在进行Web服务调用,它将获取服务器响应并更新存储中的各个模型js文件。 因此,如果我们在特定文本字段中给出一些值,那么新的要求就是以这种形式出现,那么服务器调用应该去获取一些信息。现在的问题是,这个值没有在商店中更新。 html(模板)就像任何html表单一样,mouseout有一些动作调用特定的字段。那个动作是

App.MainFormSubmitActionController = App.ModalController.extend({
needs : 'application',
actions : {
    actionToBeCalled : function() {
            this.store.find('xyzModel');            
            //the above line should normally find xyzModal in store if not found then hit server and then update the store too
        },
    mainFormSubmitAction : function() {
             //some task done here
             }
     }

});

我从服务器返回的json对象是:

  

{ “有效载荷”:{ “xyzModel”:{ “GMP”:25.0, “类型”: “SOMETYPE”, “ID”:1}}, “状态”: “SUCCESS”}

并且js文件是

App.XyzModel = DS.Model.extend({
    "type" : DS.attr(),
    "gmp" : DS.attr()
});

服务器调用发生得很好,我的问题是为什么当我得到响应并且模型未找到错误时,ember存储没有得到更新。我谷歌很多但似乎没有人遇到同样的问题。我可能犯了什么错误。

1 个答案:

答案 0 :(得分:2)

Ember并不期望模型数据包含在任何内容中,您可以做的是更改api行为,或者您可以自定义应用程序或模型序列化程序,以便提取模型并使其成为顶级对象:

App.XyzModelSerializer = DS.RESTSerializer.extend({
  extractSingle: function(store, type, payload, id) {
    delete payload.payload.status;

    payload = {xyzModel: payload.payload.xyzModel };
    return this._super(store, type, payload, id);
  }
});

还有其他方法可以返回多个记录,请参阅http://emberjs.com/api/data/classes/DS.RESTSerializer.html