我有一份订单清单。
- 订单1
- 订单2
订单3
每个订单都有一些项目
- 订单1
- 第 11 项
- 第 12 项
- 订单2
- 第 21 项
- 第 22 项
- 订单3
- 第 31 项
- 第 32 项
我这样定义模型(不使用 hasMany 关系):
App.Order = DS.Model.extend({ orderNote: DS.attr('string')}); App.Item = DS.Model.extend({ ItemName: DS.attr('string'), orderId: DS.attr('string')});
- 订单1
目的:当我导航路由“index.html#/orders”时,我想显示所有订单及其项目,如下所示
<ul>
<li>
<p>order1_note</p>
<ul>
<li>Item11</li>
<li>Item12</li>
</ul>
</li>
<li>
<p>order2_note</p>
<ul>
<li>Item21</li>
<li>Item22</li>
</ul>
</li>
<li>
<p>order3_note</p>
<ul>
<li>Item31</li>
<li>Item32</li>
</ul>
</li>
</ul>
我曾尝试使用嵌套的每个助手,
我用
var currentOrderId = order.get('id');
var ret = this.store.filter('item',{pid,currentOrderId},function(item){return item.get('orderId')=currentOrderId})</p>
但是如何在我的模板中使用过滤器结果(承诺)作为 orderItems?
<ul>
{{#each order in orders ItemController="order"}}
<li>
{{orderNote}}
<ul>
{{#each orderItems}}
<li>item</li>
{{/each}}
</ul>
</li>
{{/each}}
</ul>
编辑
得到它的工作,感谢这篇文章对查找和过滤有很好的解释,也是一个鼓舞人心的自我在控制器中的用法,(( 将项目添加到来自 ember-data 的过滤结果 ))但是,这仍然是正确的“Ember 方式”吗? ?
<script type="text/x-handlebars" data-template-name="orders">
<ul>
{{#each order in controller itemController= 'order'}}
<li>{{name}}</li>
<hr />
<ul>
{{#each item in items.content}}
<li>
{{item.name}}
</li>
{{/each}}
</ul>
{{/each}}
</ul>
</script>
这是 itemController
App.ProjectController =Ember.ObjectController.extend({
oid:function(){
return this.get('content').get('id');
}.property(),
items: function(){
var self = this;
var oid = self.get('id');
var itemPromise= self.store.filter('item', {orderId: oid},function (item) {
return item.get('orderId')==oid;
});
//itemPromise is a promise.
// cached in the callback as value?
itemPromise.then(function(value){
self.set('items',value);
});
}.property()
});