backbone.js set model internal attributes hash dir

2019-03-11 06:20发布

Using Backbone.js I know it's highly recommended to set a model's property using the set method, and NOT by directly modifying the attributes internal hash.

However, apart from not firing the "change" event automatically, what other cons or "side-effects" are there in modifying the internal hash directly?

The problem I'm facing is that while the set method takes an object literal, I need to assign the left hand side using a variable determined at run-time. Thanks.

myModel.set({
    myProperty : myValue; //myProperty is a variable, so this is invalid syntax
})

//vs

myModel.attributes[myProperty] = myValue; //myProperty is a variable that can be evaluated

标签: backbone.js
2条回答
劫难
2楼-- · 2019-03-11 07:00

In the annotated source code mentioned by Brian Genisio you can read the following lines: "Handle both "key", value and {key: value} -style arguments.". So you can just use model.set(myProperty,"bar",options). Perhaps they've added this feature after the post of Brian Genisio.. i dunno.

查看更多
爷的心禁止访问
3楼-- · 2019-03-11 07:06

Well, if you look at the annotated source code, you'll find that set does a lot.

What if you extended Backbone.Model with a function that does it for you:

Backbone.Model.prototype.setByName = function(key, value, options) { 
    var setter = {}; 
    setter[key] = value; 
    this.set(setter, options); 
};

Then, you can just do what you want directly on the model:

var model = new Backbone.Model();
model.setByName(myProperty, "bar");

That feels like a better solution to me.

Edit

As @earl3s pointed out, this is no longer necessary in more recent versions of Backbone. Today, you can just call model.set(myProperty, "bar") and it does what you want.

查看更多
登录 后发表回答