Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组对象';谁的财产变了?_Javascript_Jquery_Backbone.js - Fatal编程技术网

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')

谢谢你的回复。所以主干更改事件不是循环检查对象中的所有属性或数组中的元素是否更改,而是检查地址是否正确更改?是的,这就是我解释它的方式。