为什么“命名空间”JavaScript文件中的函数不会填充下拉列表?

时间:2016-06-27 18:58:32

标签: javascript jquery javascript-namespaces

我有2个外部JavaScript文件,一个设置为“命名空间”,另一个文件调用它。

以下是我的“命名空间”的样子

var GlobalScript = {
    GetAllStates: function () {
        $.ajax({
            type: "GET",
            url: URLParam.GetStatesForDropdown,
            contentType: "application/json; charset=utf-8",
            success: function (data, textStatus, jqXHR) {
                ShowStates(data);
            }
        })

    },
    ShowStates: function (stateData) {
        $("#acVendorState").kendoDropDownList({
            dataSource: stateData,
            dataTextField: "StateName",
            dataValueField: "StateID",
            animation: false,
            optionLabel: {
                StateName: "-- Select State --"
            }
        });
    }
}

这是调用GetAllStates()函数的脚本,

$(document).ready(function () {
    GlobalScript.GetAllStates();
});

现在这不起作用,但是,如果使“命名空间”文件看起来像这样......

function ShowStates(stateData){
$("#acVendorState").kendoDropDownList({
        dataSource: stateData,
        dataTextField: "StateName",
        dataValueField: "StateID",
        animation: false,
        optionLabel: {
            StateName: "-- Select State --"
        }
    });
}

var GlobalScript = {
        GetAllStates: function () {
            $.ajax({
                type: "GET",
                url: URLParam.GetStatesForDropdown,
                contentType: "application/json; charset=utf-8",
                success: function (data, textStatus, jqXHR) {
                    ShowStates(data);
                }
            })      
        }
    }

然后我的视图将填充下拉列表。

我的问题是如何以第一种方式让它按照我的方式工作,因为如果我以第二种方式实现它,那么它就像我做的那样毫无意义(至少据我所知)它

2 个答案:

答案 0 :(得分:1)

ShowStates不是变量。它是分配给GlobalScript的对象的属性。

ShowStates(data);应为GlobalScript.ShowStates(data);

答案 1 :(得分:0)

在js中尝试此代码

var GlobalScript = {
    GetAllStates: function () {
        var self = this; // <= self object created
        $.ajax({
            type: "GET",
            url: URLParam.GetStatesForDropdown,
            contentType: "application/json; charset=utf-8",
            success: function (data, textStatus, jqXHR) {
                self.ShowStates(data);
            }
        })

    },
    ShowStates: function (stateData) {
        $("#acVendorState").kendoDropDownList({
            dataSource: stateData,
            dataTextField: "StateName",
            dataValueField: "StateID",
            animation: false,
            optionLabel: {
                StateName: "-- Select State --"
            }
        });
    }
}