Javascript EmberJS:重新加载控制器的最佳方法&x27;s模型基于另一个属性?
基于其他属性为当前控制器重新加载模型的最佳方法是什么 例如:我有一个post控制器。作者只能有一篇文章。如果currentAuthor属性更改,我想重新加载创建后表单 我试过这样做:Javascript EmberJS:重新加载控制器的最佳方法&x27;s模型基于另一个属性?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,基于其他属性为当前控制器重新加载模型的最佳方法是什么 例如:我有一个post控制器。作者只能有一篇文章。如果currentAuthor属性更改,我想重新加载创建后表单 我试过这样做: App.PostEditController = Ember.ObjectController.extend modelReloadNeeded: Ember.observer((obj, keyName) -> postId = @get('currentAuthor').get('post_i
App.PostEditController = Ember.ObjectController.extend
modelReloadNeeded: Ember.observer((obj, keyName) ->
postId = @get('currentAuthor').get('post_id')
if postId?
@set('model', @store.find('post', postId))
, 'currentAuthor.post_id'
)
它重新加载所有内容,但返回的不是真实的模型,而是承诺。
而且它看起来不像一个惯用的余烬解决方案
也许有更好的方法来解决这个问题?我很紧张,因为我不确定你是否正确地解决了这个问题,但是:
App.PostEditController = Ember.ObjectController.extend({
modelReloadNeeded: function () {
this.get('content').reload();
}.observes('currentAuthor')
});
这将重新加载
PostEditController
的内容属性,从而在内容的currentAuthor
属性更改时更新模板。类似的内容将找到不同的帖子,然后将其设置为PostEditController
的内容
App.PostEditController = Ember.ObjectController.extend({
modelReloadNeeded: function () {
// Find another post based on author id, tweak to suit your needs
var otherPost = this.store.find('post',{ author_id : this.get('currentAuthor.id') })
this.set('content', otherPost );
}.observes('currentAuthor')
});
store.find
将返回一个承诺,因此您应该解决它以避免没有方法调用的问题
App.PostEditController = Ember.ObjectController.extend
modelReloadNeeded:(->
postId = @get('currentAuthor').get('post_id')
if postId?
@store.find('post', postId).then (post) =>
@set('content', post)
).observes('currentAuthor.post_id')
我相信重新加载控制器模型相当于重新进入同一路线。所以从2.12.0开始有很多可能性
postId
属性时,它将刷新路由
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['postId'],
postId: null, //here is the default value. default value will not be shown in URL.
});
是的,这会有帮助,但我有一个更复杂的情况:控制器是用一个新模型初始化的
@store.createRecord'post'
,我希望它被一个加载的模型替换,而不仅仅是对当前模型进行简单的重新加载使用promise更可靠。this.store.find('post',{author\u id:this.get('currentAuthor.id')})。然后(函数(post){this.set('content',post);})
import Ember from 'ember';
export default Ember.Route.extend({
queryParams: {
postId: {
refreshModel: true
}
},
model(params) {
//You will get query parameters value from the url through params.postId
return this.get('store').query('article', params);
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['postId'],
postId: null, //here is the default value. default value will not be shown in URL.
});