什么是ArrayController.itemController的ObjectController类似物


ArrayController.itemController使用

对象控制器包装控制器内容中的每个单独项目。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}} 。所以仍然感觉也许应该有一些更直接但仍然是惯用的东西......?

{{render 'templateName' model.property}}

该属性将是模板名称控制器的模型。 templateName是将用于呈现的模板。

相关内容

  • 没有找到相关文章

最新更新