6

私は次のような剣道UIグリッドを使用しています:

        function refreshGrid()
        {
            $(".k-pager-refresh.k-link").click();
        }
        var editWindow;
        var fields= {FullName: {type: "string"}, Email: {type: "string"}, LogCreateDate: {type: "date"}};
        var gridColumns =
        [{
            width: 90,
            command: { 
                name: "edit",
                text: "Edit", 
                click: function(e) {
                    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
                    editWindow = $("#edit").kendoWindow({
                        title: "Edit User",
                        modal: true,
                        visible: false,
                        resizable: false,
                        width: 800,
                        height: 400,
                        content: 'myediturl' + dataItem.ID
                    });

                    editWindow.data("kendoWindow").center().open();
                    return false;
                }
            }
        },
        {
            width: 90,
            command: { 
                name: "delete",
                text: "Delete", 
                click: function(e) {
                    //alert(this.dataItem($(e.currentTarget).closest("tr")).ID);
                    var id = this.dataItem($(e.currentTarget).closest("tr")).ID;
                    if (confirm("Are you sure you want to delete this user?"))
                    {
                        $.ajax({
                            type: 'POST',
                            url: '@Url.Action("deleteuser","admin",null, "http")' + "/" + this.dataItem($(e.currentTarget).closest("tr")).ID,
                            success: function (param) { refreshGrid(); },
                            async: false
                        });
                    }
                    return false;
                }
            }
        },
        {
            field: "FullName",
            title: "Full Name",
            type: "string"
        },
        {
            field: "Email",
            title: "Email",
            type: "string"
        },
        {
            field: "LogCreateDate",
            title: "Created",
            type: "date",
            template: '#= kendo.toString(LogCreateDate,"MM/dd/yyyy") #'
        }];

        //getSorts the columns of the grid
        function getColumns() {
            //Parsing the set of columns into a more digestable form
            var columns = "";
            for (var col in gridColumns) {
                if (!!gridColumns[col].field)
                {
                    if (columns.length > 0) {
                        columns += ";";
                    }
                    columns += gridColumns[col].field + "," + gridColumns[col].type;
                }
            }
            return columns;
        }

        function getSorts(sortObject) {
            if (!(sortObject)) {
                return "";
            }
            //Getting the row sort object
            var arr = sortObject;
            if ((arr) && (arr.length == 0)) {
                return "";
            }
            //Parsing the sort object into a more digestable form
            var columnSet = getColumns();
            var returnValue = "";
            for (var index in arr) {
                var type = "";
                for (var col in gridColumns) {
                    if (gridColumns[col].field === arr[index].field) {
                        type = gridColumns[col].type;
                    }
                }
                returnValue += ((returnValue.length > 0) ? (";") : ("")) + arr[index].field + "," + (arr[index].dir === "asc") + "," + type;
            }
            return returnValue;
        }

        var grid;
        $(function () {
            $("#grid").kendoGrid({
                dataSource: {
                    transport: {
                        read: {
                            url: "mydatasourceurl",
                            type: "POST",
                        },
                        parameterMap: function (data, type) {
                            data.filters = JSON.stringify(data.filter);
                            data.columns = JSON.stringify(getColumns());
                            data.sorts = JSON.stringify(getSorts(data.sort));
                            console.log(data);
                            return data;
                        }
                    },
                    schema: {
                        fields: fields,
                        data: "Data",
                        total: "Total"
                    },
                    pageSize: 10,
                    serverPaging: true,
                    serverFiltering: true,
                    serverSorting: true
                },

                toolbar: [{
                    name: "Add",
                    text: "Add new record",
                    click: function(e){console.log("foo"); return false;}
                }],
                height: 392,
                groupable: false,
                sortable: true,
                filterable: true,
                pageable: {
                    refresh: true,
                    pageSizes: true
                },
                columns: gridColumns
            });
            grid = $("#grid").data("kendoGrid");
        });

クリックしてもツールバーの作成アクションがトリガーされません。この問題を解決するにはどうすればよいですか?KendoUIはツールバーのクリックイベントを処理できますか?私が思いついた最良の解決策は次のようになります。

$(".k-button.k-button-icontext.k-grid-add").click(function () {
    //If the window doesn't exist yet, we create and initialize it
    if (!grids[gridContainerID].addWindow.data("kendoWindow")) {
        grids[gridContainerID].addWindow.kendoWindow({
            title: "Add " + entityName,
            width: "60%",
            height: "60%",
            close: onClose,
            open: onAddOpen,
            content: addUrl
        });
    }
    //Otherwise we just open it
    else {
        grids[gridContainerID].addWindow.data("kendoWindow").open();
    }
    //Centralizing and refreshing to prepare the layout
    grids[gridContainerID].addWindow.data("kendoWindow").center();
    grids[gridContainerID].addWindow.data("kendoWindow").refresh();
    return false;
});

前もって感謝します。

4

2 に答える 2

17

その複雑なセレクターを使用する代わりに、KendoUIが作成したセレクターを使用しますname

toolbar: [
    {
        name: "Add",
        text: "Add new record",
        click: function(e){console.log("foo"); return false;}
    }
],

その後:

$(".k-grid-Add", "#grid").bind("click", function (ev) {
     // your code
     alert("Hello");
});
于 2013-02-14T19:47:12.170 に答える
6

kendogridのドキュメントは、grid.colums.commandsのようなグリッドツールバーボタンのクリック構成がないことを示しています。この問題を解決するには、次の手順を参照してください。

  1. ツールバーのテンプレートを作成する

    <script id="grid_toolbar" type="text/x-kendo-template">
          <button class="k-button" id="grid_toolbar_queryBtn">Query</button>
    </script>
    
  2. ツールバーにテンパテを適用する

    toolbar:[{text:"",template: kendo.template($("#grid_toolbar").html())}]

  3. ボタンにイベントリスナーを追加

    $("#grid_toolbar_queryBtn").click(function(e) {  
        console.log("[DEBUG MESSAGE] ", "query button clicked!");
    });
    
于 2013-05-24T02:23:17.267 に答える