如何始终从JavaScript对象文字中调用函数,而不仅仅是在创建对象时

时间:2012-04-16 22:09:08

标签: javascript jquery kendo-ui

我希望我的头衔不会太混乱。首先是一个例子。我有以下代码配置Kendo UI数据源的读取操作。我试图根据所选的公司ID过滤所有读取,但是当页面加载时,我的getSelectedCompanyId函数只被调用一次。下面的代码太长,不能包含所有内容,所以只是摘录。

$(function () {
    function getSelectedCompanyId() {
        var id = $("#CompanyId").val();
        return id;
    }

    $("#CompanyId").kendoDropDownList({
        change: function () {
            grid.dataSource.read();
        }
    });
    var departmentIndexDataSource = new kendo.data.DataSource({
        transport: {
            read: {
                url: '@Url.Action("ListForCompanyIdJson", "Department")' + '?companyId=' + getSelectedCompanyId(),
                type: "GET"
            },

调用ListForCompanyIdJson时,始终使用下拉列表中选择的值调用$("#CompanyId").kendoDropDownList()操作。我希望每当我调用grid.dataSource.read()时都会调用此函数。

我意识到这可能对Kendo的内容非常具体,但也许我可以通过简单的JavaScript闭包和一些帮助解决这个问题。

1 个答案:

答案 0 :(得分:3)

您可以为grid.dataSource.read()安装替换函数,该函数始终首先调用您的函数,然后调用grid.dataSource.read()

例如:

grid.dataSource.oldRead = grid.dataSource.read;
grid.dataSource.read = function() {
    // call your function here
    return grid.datasource.oldRead.apply(this, arguments);
}

或者,如果您希望能够有时和另一次调用一个,您可以创建一个提供新行为的新方法,并在需要时使用它:

grid.dataSource.myread = function() {
    // call your function here
    return grid.datasource.read.apply(this, arguments);
}