2015-09-27 51 views
2

因此,我對Ember非常新鮮,並遇到TypeError異常說'不支持的內容',並能夠找到很少的文檔/內容的一般原因與此有關餘燼。是什麼導致這個例外試圖調用從我的控制器功能於一身的模板......Ember TypeError:調用控制器上不支持的內容func

路線/ dashboard.js

export default Ember.Route.extend({ 
    model: function(params){ 
    return ['Chart1', 'Chart2', 'Chart3'] 
    }, 
    setupController: function(controller, charts) { 
    controller.set('charts', charts); 
    } 
}); 

控制器/ dashboard.js

​​

dashboard.hbs

{{#each chart in charts}} 
    <div class='widget well'> 
    {{ chart }} 
    </div> 
{{/each}} 
{{something}} 

儘管模板可以成功循環傳入的數組,但試圖調用函數'something'會引發錯誤並阻止加載模板。任何想法,我搞砸了嗎?

+0

ArrayControllers已棄用。 –

+0

此外,每個幫助程序的語法都已更改。您現在應該使用塊參數 –

回答

12

使用計算屬性應該解決這個問題:

export default Ember.ArrayController.extend({ 
    something: Ember.computed(function() { 
    return 'something!'; 
    }) 
}); 

計算性能在灰燼的核心概念來理解。它們由您必須提供的函數支持,並且它們緩存返回值。

你試圖做的是,而不是使用計算屬性,顯示function。它在HTMLBars中不受支持,並且會提高TypeError

Uncaught TypeError: unsupported content

這是爲什麼?這是因爲基礎HTMLBars邏輯。它檢查的內容type嘗試顯示:

var type = typeof content; 

然後,根據類型,它選擇正確的方法在DOM顯示值:

switch (type) { 
     case 'string': 
     if (this.parseTextAsHTML) { 
      return this.domHelper.setMorphHTML(this, content); 
     } 
     return this.setText(content); 
     case 'object': 
     if (typeof content.nodeType === 'number') { 
      return this.setNode(content); 
     } 
     /* Handlebars.SafeString */ 
     if (typeof content.string === 'string') { 
      return this.setHTML(content.string); 
     } 
     if (this.parseTextAsHTML) { 
      return this.setHTML(content.toString()); 
     } 
     /* falls through */ 
     case 'boolean': 
     case 'number': 
     return this.setText(content.toString()); 
     default: 
     throw new TypeError('unsupported content'); 
} 

正如你所看到的 - 有沒有情況爲function,它一直到default處理程序。您不能以這種方式顯示function,Ember不知道它是應該先執行它並顯示函數的結果還是顯示函數體。

+0

不要忘記指定任何所需的從屬關鍵字 –

+0

@Daniel,您能解釋一下您建議的解決方案嗎?我無法理解導致錯誤的原因。謝謝 – phkavitha

+0

答覆已更新。 –

相關問題