Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ArrayController.itemController的ObjectController类似物是什么_Javascript_Ember.js - Fatal编程技术网

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
是将用于渲染的模板。

因此,也许我应该给出更多的上下文:您的解决方案适用于控制器/视图对的层次结构,但我正在尝试确定如何渲染嵌套组件的层次结构。似乎我应该首先设置控制器层次结构,以确保组件预期的属性可用。然后,一旦控制器层次结构就位,将所有数据传递到最顶层的组件中。但我想我还是错过了什么?