Javascript ArrayController.itemController的ObjectController类似物是什么
Javascript ArrayController.itemController的ObjectController类似物是什么,javascript,ember.js,Javascript,Ember.js,ArrayController.itemController使用ObjectController包装控制器内容中的每个单独项目。在ObjectController上是否有类似的方法将属性值包装到控制器中 如果ObjectController上没有直接模拟,建议使用ObjectController将模型属性包装到另一个控制器中的方法是什么 以下是我一开始所做的: App.BlogPostController = Ember.ObjectController.extend({ comments:
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']
});
这似乎有点“余烬主义”,但也有点复杂,需要将模板引用从
{{comments}
更改为{controllers.comments}
。因此,它仍然感觉应该有一些更直接但仍然是惯用的东西…?{{render'templateName'model.property}}
该属性将是TemplateNameController的模型
templateName
是将用于渲染的模板。因此,也许我应该给出更多的上下文:您的解决方案适用于控制器/视图对的层次结构,但我正在尝试确定如何渲染嵌套组件的层次结构。似乎我应该首先设置控制器层次结构,以确保组件预期的属性可用。然后,一旦控制器层次结构就位,将所有数据传递到最顶层的组件中。但我想我还是错过了什么?