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%明确:我的订单模型仅包含订单.我自己创建了那个自定义对象.这就是为什么我认为数据绑定会被破坏的原因.
问题是您的模板仅在更新时自行ordersByDateOfWeek
更新.只要任何观察到的属性发生变化('model', 'sortProperties', 'sortAscending'
),就会发生这种情况.当您自己构建订单对象时,引擎盖下的ember将根据需要添加它们,但它们不会导致ordersByDateOfWeek
更新,因此您的模板将无法识别更改.
最简单的解决方案是使用实际属性(即您的订单模型)并将其添加'model.@each.orders'
到 ordersByDateOfWeek
监视列表中.如果你需要额外的字段,比如date
在模型上创建它们作为计算属性,就像这样:
date: Ember.computed.alias('created')
Run Code Online (Sandbox Code Playgroud)
您应该很少需要手动创建对象.