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

How can I load ember model after successful ajax call in Emberjs?

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

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' })
});

您可以使用 pushPayload method and peekAll .

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');
    });
  }
});

如果您不想使用 ember-data 就不要使用它:

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"
}]
export default Ember.Route.extend({
    model() {
        return Ember.$.getJSON('http://localhost:3001/todo').then((data) => {
           return Ember.Object.create(data);
        });
    }
});