backbonejs的set方法无法工作

时间:2012-05-24 03:26:28

标签: javascript backbone.js set backbone-events

我已经定义了模型使用主干:

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”结果仍未定义!

我的代码出了什么问题?如何解决这个问题?

1 个答案:

答案 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_propertyo['some_property']访问。 Backbone模型主要处理存储在模型attributes属性中的属性,可通过get访问并通过set进行修改(当然还有fetchunset ,和clear)。 Backbone模型对任意对象属性一无所知。