2014-12-06 48 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