Javascript 在数组对象';谁的财产变了?
下面是我的一些咖啡脚本代码Javascript 在数组对象';谁的财产变了?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,下面是我的一些咖啡脚本代码 class Floor extends Backbone.Model defaults: "array":[] initialize: -> a = [] for i in [0..10] by 1 tmp = { x: i*10, y: i*10 } a.pus
class Floor extends Backbone.Model
defaults:
"array":[]
initialize: ->
a = []
for i in [0..10] by 1
tmp = {
x: i*10,
y: i*10
}
a.push(tmp)
this.set('array', a)
class FloorView extends Backbone.View
initialize: ->
this.model.on('change:array', this.renderArray, this)
renderArray: ->
console.log 'Do something'
return this
floor1 = new Floor
floorView = new floorView({ model:floor1})
以下三行不会触发调用renderArray的更改事件
方法
但是下面的代码实际上调用了renderArray方法
floor1.set('array',{});
是否有任何方法可以检测数组中对象的属性更改
或者我做错了什么?你可以这样想:“array”是一个指向数组的变量名。执行此操作时:
floor1.set('array', []);
array = floor1.get('array')
array[0].x = 1000;
floor1.set('array', array)
您将“数组”指向一个完全不同的数组。但是,执行此操作时:
floor1.set('array', []);
array = floor1.get('array')
array[0].x = 1000;
floor1.set('array', array)
您正在更新“array”已指向的数组。换句话说,您没有更改“数组”指向的数组。而是修改现有数组中的值
这个问答有更多的背景:
并指出这方面的工作:
array = floor1.get('array')
array[0].x = 1000;
floor1.set('array', array)
floor1.trigger('change:array')
谢谢你的回复。所以主干更改事件不是循环检查对象中的所有属性或数组中的元素是否更改,而是检查地址是否正确更改?是的,这就是我解释它的方式。