我已经定义了模型使用主干:
window.ResourceModel = Backbone.Model.extend({
default:{
'relativeurl':'unknow',
'type': "unkonw"
},
initialize: function(){
this.bind("change:relativeurl", function () {
console.log('change!',this.relativeurl);
});
this.bind("change:type", function () {
});
},
setRelativeURL: function (url) {
console.log('pass in',url);//this have value
this.set({"relativeurl": url});//this's value is undefined!
},
delResource: function () {
console.log("this.url",this.relativeurl);
resourceMasterView.delResourceItem(this.url);
}
});
然后我想调用这个方法
window.resourceModel = new ResourceModel();
resourceModel.setRelativeURL(url);
resourceModel.setType(type);
但只是我在上面评论,即使我已经调用了set方法,“relativeurl”结果仍未定义!
我的代码出了什么问题?如何解决这个问题?
答案 0 :(得分:2)
要访问Backbone模型的relativeurl
属性,请说m.get('relativeurl')
;该属性不存储为模型的属性,因此:
console.log('change!', this.relativeurl);
对于undefined
,总是会产生this.relativeurl
。你应该说:
console.log('change!', this.get('relativeurl'));
演示:http://jsfiddle.net/ambiguous/VBQ5h/
您也可以通过this.attributes
直接访问该属性,但通常应该单独留下attributes
:
console.log('change!', this.attributes.relativeurl);
演示:http://jsfiddle.net/ambiguous/y3Q6b/
您的真正问题可能是对象属性和 Backbone属性之间的混淆。属性是对象的字段,可以o.some_property
或o['some_property']
访问。 Backbone模型主要处理存储在模型attributes
属性中的属性,可通过get
访问并通过set
进行修改(当然还有fetch
,unset
,和clear
)。 Backbone模型对任意对象属性一无所知。