0

当我在我的应用程序中删除记录时遇到问题,我知道发生这种情况的原因,但我无法解决问题

我在这里复制了这个案例,

我添加发票,然后添加更多交易。

删除发票后出现问题,这是错误消息

未捕获的错误:断言失败:错误:尝试didSetProperty在状态为 root.deleted.saved 时处理事件。使用 {name: transactionsAmounts, oldValue: NaN, originalValue: undefined, value: 0} 调用。

基本上有一个错误模型 {transactionsAmount} 删除发票

transactionAmounts 是任何单笔交易的总和,在模型中创建

  transactionsAmounts: DS.attr('string'),
  setTransactionAmount : function(){
    if(this.get("transactions.length")>0){
      this.get("transactions").then(function(transactions){
        var sum=0;
        transactions.forEach(function(transaction){
           sum+=transaction.get("total");
        });
        this.set("transactionsAmounts",sum);
      }.bind(this));
    }
  }.observes('transactions.length', 'transactions.@each.total'),

在删除发票的那一刻, transactionAmount 没有被删除,我怎样才能做到这一点以删除 Invoice 模式(其中 hasMany 交易)而不出现错误?

4

1 回答 1

5

更新:

这应该在Ember Data beta 16中修复。


原答案:

由于 Ember Data beta 14 中引入的错误,已删除的模型仍然存在于集合中,因此您必须确保您正在使用的对象没有被删除。这段代码为我修复了它:

发票型号:

App.Invoice = DS.Model.extend({
  title         : DS.attr('string'),
  transactions  : DS.hasMany('transaction', { async:true}),
  transactionsAmounts: DS.attr('string'),
  setTransactionAmount : function(){
    if(!this.get('isDeleted') && this.get("transactions.length") > 0){
      this.get("transactions").then(function(transactions){
        var sum=0;
        transactions.forEach(function(transaction){
          if(!transaction.get('isDeleted'))
          {
            sum += transaction.get("total");
          }
        });
        if(!this.get('isDeleted'))
        {
          this.set("transactionsAmounts",sum);
        }
      }.bind(this));
    }
  }.observes('transactions.length', 'transactions.@each.total'),
});

删除控制器中的操作:

remove: function() {
      var transactions = this.get('model.transactions'),
          list = transactions.toArray();
      list.forEach(function(transaction) {
        if (!transaction.get('isDeleted'))
        {
          transaction.deleteRecord();
          transactions.removeObject();
        }
      });
      var model = this.get('model');
      if(!model.get('isDeleted'))
      {
        this.get('model').deleteRecord();
      }
      // and then go to the fatturas route
      this.transitionToRoute('fatturas');
      // set deleteMode back to false
      this.set('deleteMode', false);
    },

JSF 中。

于 2015-01-18T12:36:38.610 回答