在Emberjs成功进行ajax调用后如何加载ember模型?

时间:2017-08-23 21:27:09

标签: javascript ajax ember.js

我在todo.js中定义了一个名为app/models的模型,如下所示:

export default DS.Model.extend({
  title: DS.attr('string'),
  created_at: DS.attr('date'),
  updated_at: DS.attr('date'),
  is_deleted: DS.attr('boolean'),
  is_done: DS.attr('boolean')
});

假设我不想使用ember-data&我只是想像这样使用普通的ajax

export default Ember.Route.extend({
  model() {
    return Ember.$.getJSON('http://localhost:3001/todo').then((data) => {
       // How would I load the data into the model here?
    });
  }
});

如何将成功的ajax调用中的数据加载到模型中?

我已经定义了一个组件来显示这样的待办事项:

<ul>
  {{#each model as |todo index|}}
    {{#link-to 'todo' todo.id}}<li>{{todo.title}}</li>{{/link-to}}
  {{/each}}
</ul>

这是router.js

Router.map(function() {
  this.route('todos');
  this.route('todo', { path: '/todo/:todo_id' })
});

3 个答案:

答案 0 :(得分:0)

您可以使用pushPayload methodpeekAll

export default Ember.Route.extend({
  model() {
    return Ember.$.getJSON('http://localhost:3001/todo').then((data) => {
       this.get('store').pushPayload('todo',data);
       return this.get('store').peekAll('todo');
    });
  }
});

答案 1 :(得分:0)

如果您不想使用余烬数据,请不要使用它:

export default Ember.Route.extend({
  model() {
    return Ember.RSVP.resolve(Ember.$.getJSON('http://localhost:3001/todo'));
  }
});

这将按预期工作,并允许您访问model下的返回JSON。因此,对于您的模板,请确保http://localhost:3001/todo发送如下的JSON:

[{
    "id": "a",
    "title": "foo"
}]

答案 2 :(得分:0)

export default Ember.Route.extend({
    model() {
        return Ember.$.getJSON('http://localhost:3001/todo').then((data) => {
           return Ember.Object.create(data);
        });
    }
});