将Backbone的模型重置为初始默认值的最简单方法是什么?

PhD*_*PhD 59 javascript backbone.js backbone-model

我的模型已经有了defaults哈希.当视图/页面的某些部分被重置时,我希望将模型重置为其原始默认值.

目前,我明确将每个属性设置为其默认值.有内置的东西或JavaScript/Underscore.js/Backbone.js/jQuery函数,我可以用它来在一个语句中执行此操作吗?

Pet*_*ons 120

myModel.clear().set(myModel.defaults);
Run Code Online (Sandbox Code Playgroud)

  • 这有点危险,因为如果你没有在你的默认值中指定{id:null},它将具有与之前相同的id,并使用save()将它PUT到服务器,覆盖服务器中的旧对象默认值! (7认同)
  • **注意:**任何未在"默认值"中列出的属性都不会从模型中清除.你可能想先调用[`.clear()`](http://backbonejs.org/#Model-clear). (6认同)
  • 是的,但如果其他对象绑定它,则使用同一个对象很有用. (5认同)
  • 你可以使用``silent:true}`作为clear的参数来防止更改事件被触发 (4认同)
  • 如果你想要一个完全不同的模型,可以构造一个新模型:`myModel = new MyModel()`. (3认同)

cod*_*boy 5

当模型具有非null初始对象属性时,我这样做.

首先,将默认值定义为函数

var MyModel = Backbone.Model.extends({

    defaults:function(){

        return {
            AnArrayTypeProp:[]
        };
    }

});
Run Code Online (Sandbox Code Playgroud)

第二,需要时将模型重置为默认值

model.clear().set(model.defaults());
Run Code Online (Sandbox Code Playgroud)

  • 使用 `_.result(model, 'defaults`)` 来处理对象或函数的 `defaults` 属性。 (2认同)

saa*_*lin 5

我提出了以下方法:

reset: function () {
    this.clear({silent: true});
    this.set(this.defaults);
}
Run Code Online (Sandbox Code Playgroud)

{silent: true}clear()呼叫确保change事件不被解雇; 只有在set()通话时才会开火.