【问题标题】:Uncaught Error: Assertion Failed: You must use Ember.set() to set未捕获的错误:断言失败:您必须使用 Ember.set() 来设置
【发布时间】:2015-01-07 07:26:23
【问题描述】:

将 ember-cli 更新到 0.1.5 后,我遇到了一个新错误。

 var radioList = this.get('radioList').slice(0);
        radioList.forEach(function (item) {
            item.isSelected = false;
        }); 
         this.set('radioList',radioList);

radioList 属性正在被观察。然而,在上述场景中,它被切片,这基本上是在创建它的新副本。 怎么会出现以下错误?

未捕获的错误:断言失败:您必须使用 Ember.set() 来设置 isSelected 属性(属于 [object Object])到 false

【问题讨论】:

    标签: javascript ember.js set


    【解决方案1】:

    但是在上述场景中,它被切片,基本上是在创建它的新副本。

    您正在通过调用slice 方法创建数组的副本,但这不是“深拷贝” - 原始数组和副本数组中的对象是相同的。您可以在 Chrome/FF 控制台中查看:

    var array = [{ field: 1 }];
    var slicedCopy = array.slice(0);
    slicedCopy[0] === array[0]; // => true
    

    我没有深入探索 ember 的 slice 版本,但在您的情况下,即使是深度复制也有可能导致相同的结果。因此,只需使用 Ember.set 在 ember 应用程序中设置值。 :)

    【讨论】:

    • 嗯,我没想到深拷贝!让我检查一下。感谢您的领导
    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2016-11-27
    • 2017-10-26
    相关资源
    最近更新 更多