'load'方法回调中'this'的Javascript问题

时间:2011-05-10 12:38:57

标签: javascript

我创建了一个'Page Class'和一个相关的'load'方法。

加载完美,但我无法修改属性 在回调方法中的那个页面, 虽然我不能引用页面名称属性!!!

function Page(page) {
    this.page = page;
    this.firstLoad = true;
    this.pageName = this.page.split('.')[0].split('/')[1];
    this.loaded = false;
}



Page.prototype.load = function () {
    var that = this;
    $("#content").html();
    $("#content").load(this.page, function () {
        $.getScript("PagesViewModel/" + that.pageName + "ViewModel.js");
        that.loaded = true;
    });
}

this.loaded总是假的!!!

感谢您的帮助

此致

2 个答案:

答案 0 :(得分:0)

由于您的$.load方法是异步的,当您的Page.prototype.load方法返回时,this.loaded将始终为false,并且在$.load方法返回之前不会切换为true

所以,在这一行:

that.loaded = true;

loaded的值在您设置之前将为false,而在之后为true。问题是在您的ajax请求完成之前已经返回Page.prototype.load方法。您可以发布检查loaded的价值的代码吗?

答案 1 :(得分:0)

您需要在执行外部ajax调用时全局定义实例。

function test(instancename){
this.instancename = instancename;
this.sayHello = function(data){
alert("hello "+data);
}
$.getJSON(url, params, this.instancename+".sayHello");
}

var k = new test("k");

由于响应来自其他来源,因此您需要全局定义您的实例。