【发布时间】:2012-12-01 18:43:50
【问题描述】:
下面的执行没有错误,但是 DOM 没有更新。
var Cart = function() {
var $cart;
function init() {
$cart = $("#cart");
this.refresh();
}
function refresh() {
$.ajax({
// ...
success: function(html) {
$cart.html(html); // $cart seems to exist as JS object, but #cart doesn't get updated in the DOM.
$("#cart").html(html); // This works!
}
});
}
return {
init: init,
refresh: refresh
}
}();
$(function() {
Cart.init();
});
更新
与上面的代码相反,我实际上并没有在 jQuery 就绪事件中调用 Cart.init()。
【问题讨论】:
-
你记录收到的html来检查了吗?
-
@dystroy:我愿意,为简洁起见略过。添加点以更清晰。
-
应该可以,这里没有范围问题。
-
@randomguy:匿名回调有自己的范围,但它也可以访问所有封闭范围(它“关闭”它们,参见Closures are not complicated)。因此,
$cart在您用于创建Cart的匿名函数中定义的所有内容的范围内。 -
@randomguy:
this不会随作用域而改变。它随着函数调用而变化,这是不同的。更多:Mythical Methods 和 You must rememberthis。同一函数(因此也是同一范围)中的代码可以使用任何this值运行。
标签: javascript jquery closures revealing-module-pattern