你如何使用jQuery document.ready的揭示模块模式?

时间:2013-08-28 09:50:13

标签: javascript jquery closures revealing-module-pattern self-executing-function

我有以下(尽管)小的'揭示模块模式'实现代码:

(function (CkSpace, $, undefined) {

    CkSpace.GetLoanValues = function () {
        var url = "/Home/UpdateAPR";

        $.get(url, { Amount: $("#slider").slider("value"), Length: $("#slider2").slider("value") }, function (data) {
            $("#LoanAmount").html("£"+data.LoanAdvance);
            $("#TotalToRepay").html("£" + data.LoanGrossRepayable);
            $("#Representative").html(data.LoanAPR);
            $("#MonthlyRepayTerm").html(data.LoanTerm);
            $("#MonthlyFee").html("£" + data.LoanInstalment);
        });
    }

} (window.CkSpace = window.CkSpace || {}, jQuery));

我的印象是,通过使用window.CkSpace,我可以全局访问CkSpace作为其任何公共成员的根命名空间。但是,当我将此与$(document).ready()结合使用时,除非我在CkSpace内声明,否则我无法访问$(document).ready()命名空间。

有人可以向我解释这里的范围界定问题,是否有任何方法可以避免在我的$(document).ready()函数中声明它?

编辑:我看起来有点健忘,在$(document).ready()

范围内访问CkSpace时,我没有为窗口添加前缀

1 个答案:

答案 0 :(得分:4)

钟,

如果我理解了您的疑虑,此代码段可能会对您有所帮助。

window.CkSpace = {};

(function (CkSpace) {

    CkSpace.getLoanValues = function () {
       alert('I provide loans');
    }

} (window.CkSpace || {}, jQuery));

window.CkSpace.getLoanValues();

小提琴:http://jsfiddle.net/GDcVt/

如果不能,请将其缩小至最小,因为内部代码与范围无关。在将它传递给函数之前,我不确定objcet是否确实存在于窗口范围内。