编程语言
首页 > 编程语言> > javascript – 在Backbone中使用model.set更改嵌套属性

javascript – 在Backbone中使用model.set更改嵌套属性

作者:互联网

我正在尝试做我希望是一件简单的事情 – 只在对象的子属性上做一个model.set.

现在,我有一个看起来像这样的模型:

{
            "attr1" : true,
            "attr2" : this.model.get("username"),
            "attr3" : $('#tenant_select').val(),
            "attr_array": [
                {
                    "id": "sub_1",
                    "state": "active"
                },
                {
                    "id": "sub_22",
                    "state": "not_active"
                }
            ]
        }

我希望能够获取myMode.attr_array.state的覆盖率并更改值.但是,使用.set我只能在第一级更改属性,即attr_array.

有没有办法使用model.set来做到这一点?

解决方法:

你可以做到(我想知道为什么你没有设法做到这一点).但你必须要小心:

var array = this.get('attr_array');
array[1].state = 'active';
this.set('attr_array', array);

这有什么问题?您的模型包含对象的引用.因此,最后一行是无用的,它根本不会改变任何东西.它只相当于:

this.get('attr_array')[1].state = 'active';

当你使用set时,你会失去Backbone所做的任何内部事情.
那么该怎么办?克隆你的对象:

var array = _.clone(this.get('attr_array'));
array[1].state = 'active';
this.set('attr_array', array); // will trigger 'change' and 'change:attr_array' events

标签:json,javascript,backbone-js,marionette,backbone-model
来源: https://codeday.me/bug/20190712/1441958.html