Ember.js Computed属性在排序后不会更新hasMany项

Del*_*ynx 5 javascript ember.js

我有以下设置按日期显示我的订单: 白天订单

我有以下模板显示给定周的每个订单:(为简洁起见,我删除了一些html)

模板:

{{#each ordersByDate in ordersByDateOfWeek}}
    <div class="orders-by-date">
        <div>
            <span>{{order-date-formatted ordersByDate.date}}</span>
        </div>

        {{#each order in ordersByDate.orders}}
            {{order.number}} {{! updates correctly}}
            {{order.market.name}} {{! a hasmany property called here, does not update}}
        {{/each}}
    </div>
{{/each}
Run Code Online (Sandbox Code Playgroud)

计算性能:

ordersByDateOfWeek: function () {

    var result = []; // return value
    var object = null
    var date = null;


    // add every order to an array with a date an order objects
    this.forEach(function (order) {

        // get the date of the order 
        date = order.get('created');

        // create a new object that holds the orders for a given date
        object = result.findProperty('date', date);

        // create the object if it does not exist
        if (!object) {
            object = {
                date: date,
                orders: [],
                // some more
            };

            // add the object with the date to the result
            result.push(object);
        }

        // add the orders to the current object
        object.orders.push(order);

        // more calculations done here below
    });
}.property('model', 'sortProperties', 'sortAscending'),
Run Code Online (Sandbox Code Playgroud)

它的作用是,它创建了一个像这样的对象数组:

[
   {
     "date":"2014-12-08",
     "orders":[// order objects here],
     // some more properties
   },
   {
     "date":"2014-11-08",
     "orders":[],
   },
   {
     "date":"2014-10-08",
     "orders":[],
   },
]
Run Code Online (Sandbox Code Playgroud)

我现在正在努力工作几个小时,并且无法理解它以使其发挥作用.我的直觉说它与承诺有关吗?但是在"orders: []"数组中是真正的Ember对象,所以它应该是我认为的工作.

我希望有人能指出我正确的方向.

非常感谢你们!

编辑:100%明确:我的订单模型仅包含订单.我自己创建了那个自定义对象.这就是为什么我认为数据绑定会被破坏的原因.

Laz*_*sch 5

问题是您的模板仅在更新时自行ordersByDateOfWeek更新.只要任何观察到的属性发生变化('model', 'sortProperties', 'sortAscending'),就会发生这种情况.当您自己构建订单对象时,引擎盖下的ember将根据需要添加它们,但它们不会导致ordersByDateOfWeek更新,因此您的模板将无法识别更改.

最简单的解决方案是使用实际属性(即您的订单模型)并将其添加'model.@each.orders'ordersByDateOfWeek监视列表中.如果你需要额外的字段,比如date在模型上创建它们作为计算属性,就像这样:

date: Ember.computed.alias('created')
Run Code Online (Sandbox Code Playgroud)

您应该很少需要手动创建对象.