如何将揭示模块模式与jQuery's文档.准备

How do you use the revealing module pattern with jQuery's document.ready?

本文关键字:准备 文档 jQuery 模式 模块      更新时间:2023-09-26

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

(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时,我没有在它前面加上窗口

Ben,

如果我理解您的担忧,这个代码片段可能会对您有所帮助。

window.CkSpace = {};
(function (CkSpace) {
    CkSpace.getLoanValues = function () {
       alert('I provide loans');
    }
} (window.CkSpace || {}, jQuery));
window.CkSpace.getLoanValues();

Fiddle:http://jsfiddle.net/GDcVt/

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