2014-12-06 73 views
0

我使用Ember.js屬性「餅圖」和我的bower.json文件是:導致灰燼,圖表無法找到對象

{ 
    "name": "stats-front-end", 
    "dependencies": { 
    "handlebars": "~1.3.0", 
    "jquery": "~2.1.1", 
    "ember": "1.8.1", 
    "ember-data": "1.0.0-beta.12", 
    "ember-resolver": "~0.1.10", 
    "loader.js": "stefanpenner/loader.js#1.0.1", 
    "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3", 
    "ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4", 
    "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2", 
    "ember-qunit": "0.1.8", 
    "ember-qunit-notifications": "0.0.4", 
    "qunit": "~1.15.0", 
    "ember-charts": "~0.3.0" 
    } 
} 

我想顯示餅圖在我的app/templates/languages/index.hbs視圖中顯示爲here。該app/templates/languages/index.hbs目前是這樣的:

<ul> 
    {{#each}} 
    <li> {{name}} {{occurences}}</li> 
    {{else}} 
    <li>No language found.</li> 
    {{/each}} 
</ul> 

<div class="chart-container"> 
    {{pie-chart data=content}} 
</div> 

如果我刪除我的#each塊渲染精細圖(從灰燼數據拉)。然而,當我使用在app/controllers/languages/index.js上發現的控制器來裝飾視圖時,即使沒有從燼數據中提取,我也什麼也得不到。

應用程序/控制器/語言/ index.js

import Ember from 'ember'; 

export default Ember.ArrayController.extend({ 
    content: [ 
    { 
     "label": "Equity", 
     "value": 12935781.176999997 
    }, 
    { 
     "label": "Real Assets", 
     "value": 10475849.276172025 
    }, 
    { 
     "label": "Fixed Income", 
     "value": 8231078.16438347 
    }, 
    { 
     "label": "Cash & Cash Equivalent", 
     "value": 5403418.115000006 
    }, 
    { 
     "label": "Hedge Fund", 
     "value": 1621341.246006786 
    }, 
    { 
     "label": "Private Equity", 
     "value": 1574677.59 
    } 
    ] 
}); 

控制檯上寫着:

Uncaught Error: <[email protected]:default::ember426> Handlebars error: Could not find property 'pie-chart' on object <[email protected]:languages/index::ember418>. 

我試過語法的變化,讓餅圖到沒有成功的看法。理想情況下,我希望根據我在燼數據中創建的餅圖來創建餅圖,但是現在只需要渲染一些內容即可。

該項目是開源和發現here

回答

1

現在,Ember-Charts代碼不包含在您的內置dist\assets\vendor.js文件中。在ember-cli中安裝bower軟件包並不意味着已安裝軟件包的代碼將包含在您的應用程序中。 Ember根本無法找到pie-chart組件,因此它正在查找pie-chart作爲控制器上的屬性。 你應該添加到您的Brocfile.js下面的代碼:

app.import('bower_components/ember-charts/dist/ember-charts.js'); 
 
app.import('bower_components/ember-charts/dist/ember-charts.css');

1

控制器的content通常在route設置,在#setupController方法。由於您從languages/index路線返回this.store.find('language'),Ember將嘗試設置您的控制器的內容。所以不要手動設置。因此,首先嚐試在其他屬性上設置該數組,例如data,然後查看您是否可以將其顯示在模板中(而不使用{{pie-chart}}組件)。然後嘗試讓它與組件一起工作。

最後一點,您應該開始使用each助手的顯式形式(例如each x in controller而不是each),因爲隱式的將很快被棄用。

最後嘗試使用組件而不是控制器。例如,你可以讓你的ArrayController a LanguageListComponent(然後你可以在那裏移動餅圖數據)。

+0

感謝薩姆!如果我刪除了「{{餅圖數據=內容}}」,那麼該頁面可以正常加載存儲在我的模型中的數據(不是我上面引用的手動數據)。 Ramy的回答雖然有所幫助,但仍然存在同樣的問題,儘管我在'vendor.js'中看到'Ember.Handlebars.helper('pie-chart',Ember.Charts.PieComponent);' – Anthony 2014-12-06 21:55:59