Ember.js 如何在Ember js控制器中使用承诺的筛选结果

Ember.js 如何在Ember js控制器中使用承诺的筛选结果,ember.js,Ember.js,我有一份订单单 订单1 订单2 订单3 每个订单都有一些项目 订单1 项目11 项目12 订单2 项目21 项目22 订单3 项目31 项目32 我这样定义模型(没有使用很多关系): 目的: 当我导航到路由“index.html#/orders”时, 我想显示所有订单及其项目,如下所示 <ul> <li> <p>order1_note</p> <ul> <li>Item1

我有一份订单单

  • 订单1
  • 订单2
  • 订单3

    每个订单都有一些项目

    • 订单1
      • 项目11
      • 项目12
    • 订单2
      • 项目21
      • 项目22
    • 订单3
      • 项目31
      • 项目32
    我这样定义模型(没有使用很多关系):

目的: 当我导航到路由“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>

不,这不是真正的余烬方式。相反,您应该使用
belongsTo
hasMany
直接在模型之间建立关系

App.Order = DS.Model.extend({
  orderNote: DS.attr('string'),
  items:     DS.attr('hasMany')
});

App.Item = DS.Model.extend({
  ItemName: DS.attr('string'),
  order:    DS.attr('belongsTo')
});
然后,模板只使用
集合

<script type="text/x-handlebars" data-template-name="orders">
<ul> 
  {{#each order in orders ItemController="order"}}
    <li>
    {{orderNote}}
        <ul>
        {{#each items}}
            <li>{{ItemName}}</li>
        {{/each}}
        </ul>
    </li> 
  {{/each}} 
</ul>
</script>

    {{{#订单中的每个订单ItemController=“order”}
  • {{orderNote}}
      {{{#每项}
    • {{ItemName}}
    • {{/每个}}
  • {{/每个}}
有关更多信息,请参阅“查找模型”指南的“定义关系”部分

<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>
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()

});
App.Order = DS.Model.extend({
  orderNote: DS.attr('string'),
  items:     DS.attr('hasMany')
});

App.Item = DS.Model.extend({
  ItemName: DS.attr('string'),
  order:    DS.attr('belongsTo')
});
<script type="text/x-handlebars" data-template-name="orders">
<ul> 
  {{#each order in orders ItemController="order"}}
    <li>
    {{orderNote}}
        <ul>
        {{#each items}}
            <li>{{ItemName}}</li>
        {{/each}}
        </ul>
    </li> 
  {{/each}} 
</ul>
</script>