如何在更新商店时更新模型数据emberjs

时间:2015-10-06 23:45:41

标签: javascript ember.js ember-data

我知道控制器现在已经在Ember中被弃用了,但是我想知道如何使用旧版本的ember来实现这一点。

我的路线定义如下:

Ember.Route.extend({
    model : function(params) {
         return Ember.RSVP.hash({
             posts : store.find('post', {date : params.date, page : params.page})
         });
    },
    setupController : function(controller, model) {
        this.set('model', model.posts);
    }
});

一切正常,数据加载。现在我决定从控制器动态加载数据。所以在相应的控制器中,我做了如下:

Ember.ArrayController.extend({
    Ember.RSVP.hash({
             posts : store.find('post', {date : params.date, page : params.page})
    }).then(function(data) {
        this.store.pushPayLoad(this.store.modelFor('post'), data); 
    }.bind(this));
});

以上述方式,我能够将数据加载到Ember Store中,但它没有加载到模型中。建议的方法是,只要数据在商店中可用,模型就会立即更新。

1 个答案:

答案 0 :(得分:1)

只是为了澄清:你为什么要把东西搬到控制器?

似乎最简单的方法是摆脱所有的ArrayController代码,以及路由中的setupController方法,只需按如下方式设置模型:

Ember.Route.extend({
    model : function(params) {
         return this.store.find('post', {date : params.date, page : params.page});

    }
});

这是Ember首选(并且预期)获取带有参数的模型的方式。

为了简化事情,假设您的参数格式如下:

{
  date: SOME_DATE,
  page: SOME_PAGE
}

然后你需要做的就是:

Ember.Route.extend({
    model : function(params) {
         return this.store.find('post', params);
    }
});

这会找到包含给定参数的所有帖子,并将它们分配给模型,然后模板中的{{model}}和控制器中的this.get('model');可用。