Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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/0/backbone.js/2.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_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 主干更改模型并更改新模型的属性

Javascript 主干更改模型并更改新模型的属性,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,主干网有一个模型,当一个属性更改为新模型时,该模型也会更改,甚至默认属性也会更改这些属性 恢复模型和更改属性 var model = window.collections.elements.get('c1'); // property change css.background.value = red var vals = model.get('css')['background']['value'] = 'red'; model.set( vals ); model.trigger('ch

主干网有一个模型,当一个属性更改为新模型时,该模型也会更改,甚至默认属性也会更改这些属性

恢复模型和更改属性

var model =  window.collections.elements.get('c1');
// property change css.background.value = red
var vals = model.get('css')['background']['value'] = 'red';

model.set( vals );
model.trigger('change');
我添加了一个新的属性,它也被更改了

// add new model and inherits the model that made the change
var new_m = new Maker.Models.Widget.H2();
window.collections.elements.add(new_m);

console.log( window.collections.elements.get('c2').get('css') );
// property change and new model change css.background.value = red

控制台

更新

解决方案1

谢谢你

解决方案2

var model=window.collections.elements.get('c1');
var newModel=$.extend(true,{},model)

显然主干网不够聪明,无法克隆默认值——它保存并重新使用同一个实例(当然,这对值类型有效,但对引用类型无效)

为了解决这个问题,我将使用“initialize”函数设置“css”默认值,如下所示:

Maker.Models.Widget.H2 = Backbone.Model.extend({
    sync: function () { return false; },
    initialize: function() {
        if (!this.has('css')) {
            this.set('css', { 
                'background' : {
                    value : '',
                    type  : 'text',
                    script : ''
                } 
            });
        }
    },
})