0

私はすでにモデル使用バックボーンを定義しています:

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」の結果はまだ定義されていません!

私のコードの何が問題なのですか?どうすればこの問題を解決できますか?

4

1 に答える 1

2

バックボーン モデルの属性にアクセスする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/

あなたの本当の問題は、おそらくオブジェクトのプロパティバックボーンの属性の間の混乱です。プロパティはオブジェクトのフィールドであり、o.some_propertyまたはとしてアクセスされo['some_property']ます。バックボーン モデルは主に、モデルのattributesプロパティに格納され、 (もちろん、、および)getを介してアクセスおよび変更される属性を扱います。バックボーン モデルは、任意のオブジェクト プロパティについて何も知りません。setfetchunsetclear

于 2012-05-24T03:42:36.383 に答える