标签:json javascript backbone-js marionette backbone-model
我正在尝试做我希望是一件简单的事情 – 只在对象的子属性上做一个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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。