ArrayController.itemController
用ObjectController包装控制器内容中的每个项目。在ObjectController
上是否有类似物来将属性的值包装在控制器中?
如果ObjectController
上没有直接模拟,那么使用ObjectController
将模型的属性包装在另一个控制器中的建议方法是什么?
这是我最初做的事情:
App.BlogPostController = Ember.ObjectController.extend({
comments: function(){
return App.CommentsController.create({
model: this.get('model.comments')
});
}.property()
});
这很简单,但如果更换model.comments
则会崩溃。所以我改变了它以响应变化:
App.BlogPostController = Ember.ObjectController.extend({
comments: function(){
var commentsController = this.get('_commentsController');
if (!commentsController){
commentsController = App.CommentsController.create();
this.set('_commentsController', commentsController);
}
commentsController.set('model', this.get('model.comments'));
return commentsController;
}.property('model.comments')
});
这似乎有效(虽然我想象我还没有发现问题),但感觉相当不雅。有没有更好的方法呢?
修改:
另一种选择是:
App.BlogPostRoute = Ember.Route.extend({
model: function() {
return {...};
},
setupController: function(controller, model){
this._super(controller, model);
this.controllerFor('comments').set('content', model.get('comments'));
}
});
App.BlogPostController = Ember.ObjectController.extend({
needs : ['comments']
});
这似乎可能有点“Ember-istic”,但它也有点复杂,需要更改从{{comments}}
到{{controllers.comments}}
的模板引用。所以它仍然觉得应该有一些更直接但仍然惯用的东西......?
答案 0 :(得分:0)
{{render 'templateName' model.property}}
该属性将是TemplateNameController的模型。 templateName
是将用于呈现的模板。