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();

});

在这里,我尝试实现 parentFetch 函数,在其中设置模型的 this.urlRoot 变量。但是,由于某种原因,获取使用了 urlRoot 的旧值,该值设置为默认值。

为什么 this.set("urlRoot", ...) 不会改变它的值?我还打印了控制台输出:

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

输出显示:调试输出/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')this.attributes.urlRoot在示例中的模型中,您会发现它们都"/cgi-bin/yoman.pl"set()您的调用而返回。

于 2013-06-11T11:05:46.093 回答