1

私は次のコードを書きました:

var Parent = Backbone.Model.extend({
    initialize: function() {
        console.log("this is parent's init function");
    },
    defaults: {
        name: "",
        id: 0
    },
    parentFetch: function() {
        this.set("urlRoot", "/cgi-bin/yoman.pl");
        console.log("debug output" + this.urlRoot + ":" + this.get("urlRoot"));

        this.fetch({
            arg: "her",
            success: function() {
                console.log("fetch success");
            },
            error: function() {
                console.log("fetch error");
            }
        });
    },
    urlRoot: "/cgi-bin/hello1.pl"
});

$(document).ready(function() {
    console.log("this is ready function");
    var myParent = new Parent();
    myParent.parentFetch();

});

ここで、モデルの this.urlRoot 変数を設定しているparentFetch関数を実装しようとしています。ただし、何らかの理由で、フェッチはデフォルトで設定された urlRoot の古い値を使用します。

this.set("urlRoot", ...) が値を変更しないのはなぜですか? また、出力をコンソールに出力しました:

console.log("debug output" + this.urlRoot + ":" + this.get("urlRoot"));

出力は次のとおりです: debug output/cgi-bin/hello1.pl:/cgi-bin/yoman.pl

ここで何が問題で、どのように修正しますか?

4

1 に答える 1

3

set()nameなどのモデルの属性を設定するために使用されます。urlRootは属性ではないためset()、設定には使用できません。

設定するには、他のオブジェクトの値と同じように割り当てます。つまり、次のようになります。

this.urlRoot = "/cgi-bin/yoman.pl";

それ以外の

this.set("urlRoot", "/cgi-bin/yoman.pl");

参考までに、例のモデルでthis.get('urlRoot')orを試してみると、呼び出しのためにthis.attributes.urlRoot両方が返されることがわかります。"/cgi-bin/yoman.pl"set()

于 2013-06-11T11:05:46.093 に答える