【问题标题】:Javascript probleme with 'this' in 'load' method callback'load' 方法回调中的 'this' 的 Javascript 问题
【发布时间】:2011-05-10 12:38:57
【问题描述】:

我创建了一个“页面类”和一个关联的“加载”方法。

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

功能页(页){ this.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 总是假的!!!

感谢您的帮助

问候

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    所以,在这一行:

    that.loaded = true;
    

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

    【讨论】:

    • 谢谢伊莱。但是我在加载成功时进行修改,此时 $.load 已经返回,不是吗?
    【解决方案2】:

    您需要全局定义实例,以防执行外部 ajax 调用。

    功能测试(实例名称){ this.instancename = 实例名; this.sayHello = 函数(数据){ 警报(“你好”+数据); } $.getJSON(url, params, this.instancename+".sayHello"); } var k = 新测试(“k”);

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

    【讨论】:

    • 谢谢,正如 Eli 所说,我必须进行同步调用。 link
    • 不,我认为您不必进行同步调用。我们需要查看您在哪里检查加载的值,以确保您没有在 ajax 调用完成之前检查它。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多