0

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 的」に見えるかもしれませんが、もう少し複雑で、テンプレート参照を から{{comments}}に変更する必要があり{{controllers.comments}}ます。ですから、もう少し単純でありながら慣用的なものがあるべきだとまだ感じています...?

4

1 に答える 1