【问题标题】:How to change default model attributes using set method in Backbone.js如何使用 Backbone.js 中的 set 方法更改默认模型属性
【发布时间】:2011-11-23 15:10:45
【问题描述】:

我在模型中有一些缺陷数据

window.AppState = Backbone.Model.extend({
  defaults: function() {
    return {
      country:  false,
      region: false
    };
  }
});

var appState = new AppState();

然后在路由器中,我得到一个包含模型新值的数组,如下所示:

[["country", "new country value"], ["region", "new region value"]]

现在在一个 for 循环中,我循环更新所有收到的参数... 我是这样理解的

appState.attributes[arg] = val;

但我认为还不清楚,因为在 Backbone.js 的文档中,我读到了“属性”方法并看到了这个: “请使用set来更新属性,而不是直接修改它们。” 所以我的问题是:如何使用 set 方法更改默认值的属性?

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    试试.set() 函数...

    appState.set({arg : val});
    

    一旦您使用.set() 设置参数,它将覆盖默认值。

    您的示例稍作修改:

    window.AppState = Backbone.Model.extend({
      defaults: function() {
        return {
          country:  false,
          region: false
        };
      }
    });
    
    var appState = new AppState();
    
    // when you get your array of new values you can turn it in an object
    var myArray = [["country", "new country value"], ["region", "new region value"]];
    var newValues = {};
    for (var i = 0; i < myArray.length; ++i)
    {
        newValues[myArray[i][0]] = myArray[i][1];
    }
    
    // set the properties to the new values
    appState.set(newValues);
    
    // if you now return the json of the model, it has changed properties
    console.log(appState.toJSON());
    

    备注 这个 for 循环很大程度上取决于您的数组的结构,我编写它的方式将适用于您在示例中给出的数组,如果有任何更改,您将需要更改 for 循环的工作

    备注2 如果您更频繁地使用此技术,您总是可以在辅助方法中提取该功能。

    【讨论】:

    • 是的,这是逻辑,但我的问题是,如何在循环中进行:我的意思是如果我有带键的字符串和带值的字符串,我如何使用 .set() 来实现?例如。此代码不起作用: var key = 'country', value = 'some value'; model.set({key, value});
    • 我用插入更改所需的内容更改了我的答案。实际上它们被设置为一个对象,您不需要循环和设置,但您确实需要一个循环来创建对象:s
    • var attrs = {}; attrs[key] = value; model.set(attrs);
    • 是的,那是真的 =) 非常感谢 Sander 和 maxl0rd 这就是我的意思,现在它可以完美运行了。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多