2013-10-25 65 views
0

ArrayController.itemController使用ObjectController封裝控制器內容中的每個單獨項目。有沒有在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'] 
}); 

這似乎是它可能會多一點「餘燼-信息研究所」,但也多了幾分令人費解,並要求將模板參考從{{comments}}更改爲{{controllers.comments}}。所以它仍然覺得應該有一些更直接但仍然慣用的東西......?

回答

0

{{render 'templateName' model.property}}

該物業將是TemplateNameController模型。 templateName是將用於呈現的模板。

+0

所以,也許我應該給予更多的上下文:你的解決方案適用於控制器/視圖對的層次結構,但我試圖確保我的頭部纏繞如何呈現嵌套組件的層次結構。看起來我應該首先設置控制器層次結構以確保組件所需的屬性可用。然後,一旦控制器層次結構到位,將所有數據傳遞到最上面的組件。但我猜我還錯過了什麼? –

相關問題