我已经定义了一个模型使用主干:
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”结果仍未定义!
我的代码有什么问题我该如何解决这个问题?
最佳答案
要访问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']
进行访问。骨干模型主要处理存储在模型的attributes
属性中的属性,这些属性可通过get
访问并通过set
(当然还有fetch
,unset
和clear
进行修改)。骨干模型对任意对象属性一无所知。