Backbone example
how to access/modify attribs on a model
by johnwun
HTML
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.com/backbone/backbone.js"></script>
JavaScript
var MyModel = Backbone.Model.extend({
validate: function(attribs) {
if (attribs.hasOwnProperty('myString')) {
// Maybe trim it by default?
// or replace swear words?
attribs.myString = attribs.myString.trim();
// do validation here...
}
if (attribs.hasOwnProperty('myNumber')) {
// I don't really see a use for it, but it won't change.
attribs.myNumber = 43;
//validation
}
if (attribs.hasOwnProperty('myBoolean')) {
// again, no use case, but it won't change
attribs.myBoolean = false;
//validation
}
if (attribs.hasOwnProperty('myObject')) {
// WILL change, since _.extend is not a deep copy
attribs.myObject.foo = "baz";
//validation
}
}
});
//try and set our attribs using `set`
var someInstance = new MyModel();
var attribs = {
myString: " Is an untrimmed String ",
myNumber: 42,
myBoolean: true,
myObject: {
foo: "bar"
}
};
someInstance.set(attribs);
console.log(someInstance.get('myString')); // outputs ' Is an untrimmed string ', should be trimmed
console.log(someInstance.get('myNumber')); // outputs 42, should be 43
console.log(someInstance.get('myBoolean')); //outputs true, should be false
console.log(someInstance.get('myObject').foo); //outputs "baz" !
function modifiesObject(obj) {
// bah hasOwnProperty checks.
obj.myString = obj.myString.trim();
obj.myNumber = 43;
obj.myBoolean = false;
obj.myObject.foo = "baztopia";
}
modifiesObject(attribs); //does what we want: change the object
console.log(attribs.myString); //outputs "Is a untrimmed String"
console.log(attribs.myNumber); //outputs 43
console.log(attribs.myBoolean); //outputs "false"
console.log(attribs.myObject.foo); //outputs "baztopia"