2014-11-04 142 views
-1

骨干有一个模型,当属性更改为新模型时,也会有更改,甚至默认属性也会更改这些模型。骨干更改模型并更改新模型的属性

恢复模型和更改属性

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/

控制台

UPDATE

溶液1

McGarnagle谢谢

溶液2

变种模型= window.collections.elements.get( 'C1'); var newModel = $ .extend(true,{},model);

回答

0

因此显然Backbone并不足以克隆默认值 - 它保存并重新使用相同的实例(当然,这对数值类型适用,但不适用于参考类型)。

要解决这个问题,我会用 “初始化” 功能设置 “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/