2013-07-29 104 views
1

我正試圖在我的控制器/模板中重新使用代碼。在我的模板之一,我有以下幾點:如何根據屬性名稱訪問控制器的內容

{{#if controllers.nodesIndex.content.isUpdating}} 

這是工作正常,但讓這個模板非常具體。我想概括這一點。我想這樣做財產以後,如:

{{#if controllers.{{indexController}}.content.isUpdating }} 

哪裏indexController實際上是在我的控制器中的配置參數:

indexController : 'nodesIndex', 

使用的語法不工作,我不知道是否有一種方法做我想做的事情。

我曾嘗試另一件事很簡單:

{{#if isUpdating}} 

而且我已經定義了這個作爲一個CONTROLER計算性能。這是一般的設置(「基礎類」):

getIndexController : function() { 
    return this.get('controllers.' + this.indexController); 
}, 
isUpdating  : function() { return this.getIndexController().get('content').isUpdating; }.property(), 

但我無法告訴property()哪些其他特性此計算性能取決於,因爲他們實際上是可配置的,由getIndexController()函數返回。

有關如何訪問「動態」控制器內容的任何想法?

回答

1

在控制器上有一個屬性是「動態」控制器的名稱,是一個很好的開始。爲什麼不只是讓你的財產依賴於它?

getIndexController : function() { 
    return this.get('controllers.' + this.indexController); 
}, 
isUpdating : function() { 
    return this.getIndexController().get('content').isUpdating; 
}.property('indexController'), 

如果您認爲「getIndexController」作爲輔助函數,那麼它是有道理的。滾動兩個功能結合在一起更容易地看到,indexController的屬性是需要觀察的唯一不動產:

isUpdating : function() { 
    return this.get('controllers.' + this.indexController).get('content').isUpdating; 
}.property('indexController'), 
+0

不確定這可以工作:'isUpdating'不依賴於'this.indexController'的值,而是依賴於'isUpdating' 'this.indexController'中指定的'controller'的'content'屬性。也就是說,即使'this.indexController'沒有改變(它不會:它是給定控制器的一個固定參數),'isUpdating'屬性可以很好地改變,因爲在控制器中指定的屬性'this.indexController'會改變。 – dangonfast

2

我認爲你要走錯了路。 Ember提供了一些選項,讓您在控制器之間共享模板。

在這裏我做了局部 http://jsfiddle.net/marciojunior/KxM9k/

<script type="text/x-handlebars" data-template-name="application"> 
    <h1>Partial example</h1> 
    {{#linkTo "index"}}Index{{/linkTo}} 
    {{#linkTo "other"}}Other{{/linkTo}} 
    {{outlet}} 
</script> 

<script type="text/x-handlebars" data-template-name="index"> 
    <h2>Index template</h2> 
    {{partial "updatingMessage"}} 
</script> 

<script type="text/x-handlebars" data-template-name="other"> 
    <h2>Other template</h2> 
    {{partial "updatingMessage"}} 
</script> 

avaliable在該鏈接http://emberjs.com/guides/templates/rendering-with-helpers/

+0

我已經在使用partials/outlets。不過,我的頂級模板可以統一在一個模板中。這就是爲什麼我想刪除任何特定於控制器的引用,並在控制器中進行配置的原因。試想一下,你想將你的「索引」和你的「其他」模板統一到一個「通用」模板中。由於我爲我的模板使用單獨的文件,我希望能夠使用符號鏈接來鏈接到通用模板 - 或者可以使用其他技巧。 – dangonfast

0

我已經以間接的方式來實現這一切選項的例子,以及觀察員:

isUpdatingChanged: function() { 
    this.getTopController().set('isUpdating', this.get('content').get('isUpdating')); 
}.observes('content.isUpdating'), 
相關問題