骨干改变模型并改变新模型的属性

时间:2014-11-04 21:19:10

标签: javascript backbone.js underscore.js

Backbone有一个模型,当一个属性改变为新模型时也会改变,甚至默认属性也会改变这些。

恢复模型并更改属性

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

http://jsfiddle.net/L8cjfged/

控制台

更新

解决方案1 ​​

McGarnagle谢谢你

解决方案2

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

1 个答案:

答案 0 :(得分:0)

显然Backbone不够智能克隆默认值 - 它保存并重新使用相同的实例(当然这适用于值类型,但不适用于引用类型)。

为了解决这个问题,我会使用“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 : ''
                } 
            });
        }
    },
})

http://jsfiddle.net/ueq87c85/3/