提问者:小点点

动态删除条目后,Handlebar模板不会更新以反映计算的属性


这是基本设置:

  1. 我使用一个简单的计算属性将一个记忆数据模型数组绑定到我的车把模板
  2. 在通过xhr获取模型之前,我根据一些配置预先添加了一些模型
  3. 当xhr被解析时,我需要用通过线路返回的对象替换任何配置模型
  4. 这似乎确实有效,因为在内存中我可以看到我的计算属性只有2项,但我的车把模板似乎显示3(xhr返回后实际从数组中剪切的配置模型之一)

我验证了上面的#如下

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));
      }
  });

共1个答案

匿名用户

旧答案被删除了。大错特错了。

splice不KVO兼容。替换是替代它使用的兼容的方法。CollationView依赖于替换支持的数组突变观察者来知道要添加和删除哪些视图。

如果这不是问题,那我就吃我的帽子。