这是基本设置:
我验证了上面的#如下
a.)在我要求的chrome开发工具中
App.Day. find(1).get('listings').get('长度');//xhr后返回2
B.)我还做了以下事情
应用程序.约会. all().get('长度');//xhr后返回2
**这里是代码**
我有以下车把模板(显示3项而不是2项)
{{#each appointment in day.listings}}
{{appointment.start}}<br />
{{/each}}
我的日模型上的列表计算属性如下所示
App.Day = DS.Model.extend({
name: DS.attr('string'),
appointments: function() {
return App.Appointment.find();
}.property(),
listings: function() {
//pretend we need to add some values in memory before we fire the xhr ...
App.Appointment.add({name: 'first'});
return this.get('appointments');
}.property().volatile()
});
约会模型是一个内存数据模型,但是因为我需要动态替换内存中的项目,所以我覆盖了查找方法(并在我自己的add方法中存根以更好地控制数组)
App.Appointment = DS.Model.extend({
name: DS.attr('string')
}).reopenClass({
records: [],
find: function() {
var self = this;
self.records.clear();
$.getJSON('/api/appointments/', function(response) {
for(var i = 0; i < response.length; i++) {
for(var j = 0; j < self.records.get('length'); j++) {
if (self.records[j].get('name') === response[i].name) {
//now that our xhr has finished we need to replace any that already exist
self.records.splice(j, 1);
}
}
}
});
return this.records;
},
all: function() {
return this.records;
},
add: function(record) {
this.records.addObject(App.Appointment.createRecord(record));
}
});
旧答案被删除了。大错特错了。
splice
不KVO兼容。替换
是替代它使用的兼容的方法。CollationView依赖于替换
支持的数组突变观察者来知道要添加和删除哪些视图。
如果这不是问题,那我就吃我的帽子。