2015-10-06 83 views
1

我知道控制器现在在Ember中已弃用,但我想知道如何使用旧版本的ember来实现此目的。如何在更新商店时更新模型数据emberjs

我有一个路线定义如下:

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

以上述方式,我能得到的灰烬存储加载的数据,但它不加载到模型中。推荐的方式是什么,以便在商店中有数据时立即更新模型。

+0

不建议使用阵列控制器。 –

+0

我的不好。但目前我坚持使用旧版本的余烬:( –

回答

1

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

看来,最简单的方式去了解这一切将是摆脱掉这一切ArrayController代码,以及在路由setupController方法,只是设置模型如下:

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

    } 
}); 

这是Ember首选(和预期)的方法,用参数获取模型。

为了更加简化的东西,并假设您的PARAMS的格式如下:

{ 
    date: SOME_DATE, 
    page: SOME_PAGE 
} 

然后,所有你需要做的是:

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

这会发现所有的职位与给定的参数相关联,然后将它们分配给模型,然后在模板中以{{model}}的形式提供,在控制器中以this.get('model');的形式提供。

+1

非常感谢你,你的确帮助我理解了一些细微差别,而且,如果商店得到更新,我希望模型得到更新。基本上在控制器中,并相应地使用this.store.pushPayload()来更新帖子。我不得不在每次我做这个懒加载时明确地设置控制器中的模型吗? –

+1

,但你根本不需要重新定义模型 我可以说的是,你应该检查[我对这个问题的回答](http://stackoverflow.com/a/32997926/1431452)有关如何在商店更新时保持模型更新的更多信息。 – joshfarrant