2015-07-19 30 views
2

我正在构建订购咖啡的应用程序。在其中一条路线上,我有商店菜单,其中有一系列具有类型,大小,价格属性的饮料。举例来说,12盎司摩卡可能需要5.00美元。EmberJS中的表结构化数据

我在构建这些数据和显示它的时候遇到了困难,我在想,也许我并没有用“余烬的方式”来思考,因为我是一般的新开发人员和前端开发人员。

在我的路线中,我尝试了一些不同的事情。我有一个'商店饮料'的模型,返回商店的所有饮料。我尝试过使用它作为我的模型,并且能够将模型中的所有商店饮料都返回,但由于没有像{{if drink.type == 'Mocha'}}这样的内置帮助程序,因此很难在格式中显示所有饮料。

我试过的另一件事是使用Ember.RSVP.hash来分隔路线中的饮料,然后在我的模板中安装Ember Truth Helpers来确定每个饮料的大小。

// routes/menu.js 
model: function() { 
    // get the drinks for the current store, for now hardcode 
    const storeId = 4; 

    return Ember.RSVP.hash({ 
    mochas: this.store.find(
     'store-drink', {'store':storeId, 'type':'Mocha'}), 
    espressos: this.store.find(
     'store-drink', {'store':storeId, 'type':'Espesso'}), 
    }) 
}, 
setupController: function(controller, model) { 
    controller.set('mochas', model.mochas); 
    controller.set('espressos', model.espressos); 
} 

//menu.hbs 
{{#each drink in mochas}} 
    {{if (eq drink.type 'Mocha')}} 
    <h2>mochas</h2> 
    {{drink.type}} 
    {{/if}} 
{{/each}} 

不仅会收到在控制器我的“摩卡”对象返回的所有饮料,但我似乎无法得到的安装,如果帮手擦出火花。

有什么建议吗?也许我应该有一个完全不同的方法,或者我只是想念一些东西。

我在灰烬1.13

回答

1

我没有使用过烬真理辅助,但在看文档不是它应该是:

{{#each drink in mochas}} 
    {{#if (eq drink.type 'Mocha'}}} 
    <h2>mochas</h2> 
    {{drink.type}} 
    {{/if}} 
{{/each}} 

而且你写{{item.type}}而不是{{drink.type}} 。尽管现在你已经细查了摩卡饮料,你应该能够摆脱if。只留下:

{{#each drink in mochas}} 
    <h2>mochas</h2> 
    {{drink.type}} 
{{/each}} 

对于find它只是发送GET到后端,它负责返回什么。如果你想过滤的话:

this.store.find('store-drink', {'store':storeId}, function(drink) { 
    return drink.type === 'Mocha'; 
}); 
+0

哎对不起,我在复制代码时犯了一个错误 - 处于变化中。其实它是'{{if(eq drink.type'Mocha')}}'根据文档,但我得到一个构建错误,说块不匹配 – awwester

+0

@awwester你需要'#'。 –

+0

好的,谢谢我有模板部分工作,并更好地理解助手与#和没有#之间的区别。任何想法为什么我的mochas对象不是只返回具有摩卡类型的饮品?我希望路线按类型过滤饮料,但由于某种原因,我的mochas对象正在返回所有饮料类型。 – awwester