在Ajax成功之后将记录添加到Ember数据存储

时间:2016-09-13 19:51:27

标签: ember.js ember-data ember-cli

我正在构建一个Ember应用程序,我通过以下ajax调用从路径中的API端点获取Debate对象的提要:

import Ember from 'ember';
export default Ember.Route.extend({
  model: function() {

    $.getJSON("http://localhost:3000/api/v2/debate_feed").then(debates => {
      store.push(debates);
    });

  }
});

收到Debate对象后,我需要将它们保存到数据存储中,问题是在ajax调用完成后我无法访问Ember Data存储。当我尝试访问商店时,我收到以下错误:

Uncaught ReferenceError: store is not defined(…)

任何想法是什么问题?

2 个答案:

答案 0 :(得分:3)

路线中未定义

store。您可以this.get('store')获取store个对象。您可以尝试以下代码。

import Ember from 'ember';
export default Ember.Route.extend({
    beforeModel(transition) {
        return Ember.$.getJSON("http://localhost:3000/api/v2/debate_feed").then(debates => {
            this.get('store').push(debates);
        });
    },
    model: function() {
        return this.store.peekAll('debate');
    }
});

但首选方法是,
1.定义辩论模型model guide
2.Define Adapter - JSONAPIAdapter或RESTAdapter。adapter guide
3.实现GET请求/辩论的API端点

然后您只需简单地说this.store.findAll('debate')这将获取并将其更新为store

import Ember from 'ember';
export default Ember.Route.extend({   
    model: function() {
        return this.store.findAll('debate');
    }
});

答案 1 :(得分:1)

它应该是this.store.push(...),但你真的应该用适配器实现ajax调用!另请注意,model将为空,因为您什么都不返回。如果您想让模型执行return this.store.push(...)