0
  • リスト項目

ボタンを押して kendo TreeList をロードするページがあります。データは、Kendo TreeList データソースのベースとしてとどまる変数に静的に定義されています。

ほとんどが Telerik Web サイトからコピーしたデータソース定義があります。CRUD に関するいくつかの要件を含むツリーリストがあります。

  • level1 - 何もない
  • level2 - 新しい子ノードのみを追加
  • level3 - 編集および削除

編集は level3 アイテムをダブルクリックする必要があります

CRUD コマンド ボタンはアイコンのみにする必要があります (ボタンにテキストはありません)。

残念ながら組み込みの CRUD コントロールではこれを実現できなかったので、「タイプ」フィールドに基づいてボタンを配置するテンプレート列を使用しました。

これでうまくいきましたが、どうにか元に戻すことができないいくつかの変更の後、追加機能が機能しなくなりました。機能しますが、新しい子ノードは、別のノードの編集または削除後にのみ表示されます。(あたかも追加中に変更イベントがトリガーされないかのように)。treeList の [追加] ボタンは関数 addProduct を呼び出します。最後に、データソースに直接 pushCreate を試みます。ただし、Transport.create は呼び出されません。別の Crud アクションがそれをトリガーした後にのみ呼び出されます

何が問題なのか誰にもわかりますか?これはすべて、はるかに簡単なアプローチで達成できませんか?

ここにページがあります:

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Kendo UI Grid - CRUD operations with local data</title>

    <style>
        html {
            font-size: 12px;
            font-family: Arial, Helvetica, sans-serif;
        }
    </style>
    <link href="styles/kendo.common.min.css" rel="stylesheet" />
    <link href="styles/kendo.default.min.css" rel="stylesheet" />

    <script src="Scripts/jquery-2.1.3.min.js"></script>
    <!--<script src="Scripts/kendo.all.min.js"></script>-->
    <script src="Scripts/kendo.all.js"></script>
</head>
<body>
    <style>
        .hidden {
            display: none;
        }

        .k-grid tbody .k-button, .k-ie8 .k-grid tbody button.k-button {
            min-width: 0px;
            padding-left: 10px;
            padding-right: 0px;
            padding-bottom: 0px;
            padding-top: 0px;
            margin: 0px;
        }
    </style>

    <div id="buttons">
        <br />
        <p>
            <button name="clear" id="clear" onclick="myclear()">Clear grid</button>
            <button name="load" id="load" onclick="loadLocal()">Load from local DB</button>

        </p>
        <br />
        version 1.01<br />
        <br />
    </div>
    <div id="treelist"></div>

    <script id="btn-template" type="text/x-kendo-template">
        # if (Code == "Product") { #
        <a id="btnupdate" class="k-button k-button-icontext k-grid-update column hidden" title="Update product" onclick="update(this)" href="\#"><span class="k-icon k-update"></span></a>
        <a id="btndelete" class="k-button k-button-icontext k-grid-delete column" title="Delete product" data-command="destroy" href="\#"><span class="k-icon k-delete"></span></a>
        # } else if (Code == "Requirement") { #
        <a class="k-button k-button-icontext k-grid-add column" title="Add a product to this requirement" onclick="addProduct(this)" href="\#"><span class="k-icon k-add"></span></a>
        # } #
    </script>

    <script>

        var EPDdata  // For holding the data of the TreeList


        function loadLocal() {
            EPDdata = [
                          { Id: 1, Description: "Item1", Code: "Category", parentId: null },
                          { Id: 2, Description: "Item2", Code: "Requirement", parentId: 1 },
                          { Id: 3, Description: "Item3", Code: "Product", parentId: 2 },
                          { Id: 4, Description: "Item4", Code: "Requirement", parentId: 1 },
                          { Id: 5, Description: "Item5", Code: "Product", parentId: 4 },
                          { Id: 6, Description: "Item6", Code: "Product", parentId: 4 },
                          { Id: 7, Description: "Item7", Code: "Requirement", parentId: 1 },
                          { Id: 8, Description: "Item8", Code: "Requirement", parentId: 1 },
                          { Id: 9, Description: "Item9", Code: "Product", parentId: 8 },
                          { Id: 10, Description: "Item10", Code: "Product", parentId: 8 }
            ]
            LoadTree();
        };

        function LoadTree() {
            var EPDdataNextID = EPDdata.length + 1;

            var LocaldataSource = new kendo.data.TreeListDataSource({
                transport: {
                    read: function (e) {
                        // on success
                        e.success(EPDdata);
                    },
                    create: function (e) {
                        // assign an ID to the new item
                        e.data.Id = EPDdataNextID++;
                        // save data item to the original datasource
                        EPDdata.push(e.data);
                        // on success
                        e.success(e.data);
                    },
                    update: function (e) {
                        // locate item in original datasource and update it
                        EPDdata[getIndexById(e.data.Id)] = e.data;
                        // on success
                        e.success();
                    },
                    destroy: function (e) {
                        // locate item in original datasource and remove it
                        EPDdata.splice(getIndexById(e.data.Id), 1);
                        // on success
                        e.success();
                    }
                },
                error: function (e) {
                    // handle data operation error
                    alert("Status: " + e.status + "; Error message: " + e.errorThrown);
                },
                pageSize: 10,
                expanded: true,
                batch: false,
                schema: {
                    model: {
                        id: "Id",
                        expanded: true,
                        fields: {
                            Id: { type: "number", editable: false, nullable: true },
                            Description: { type: "string", validation: { required: true } },
                            Code: { type: "string" },
                            parentId: { type: "number", editable: true, nullable: true }
                        }
                    }
                }
            });


            $("#treelist").empty(); // only 1 treelist on the page please

            $("#treelist").kendoTreeList({
                dataSource: LocaldataSource,
                pageable: false,
                edit: onEdit,
                columns: [
                    { field: "Description", title: "Description", width: "400px" },
                    { field: "Code", width: "120px" },
                    { field: "Id", title: "ID", width: "30px" },
                    { field: "parentId", title: "PID", width: "30px" },
                    { width: "35px", template: $("#btn-template").html() },
                    { command: ["create", "edit", "destroy"] }

                ],
                editable: "inline"
            });

            var treeList = $("#treelist").on("dblclick", function (e) {
                var treeList = $("#treelist").data("kendoTreeList");
                var rowindex = e.target.parentNode.rowIndex; // get rowindex
                var tr = $(e.target).closest("tr"); // get the current table row (tr)
                var dataItem = $("#treelist").data("kendoTreeList").dataItem(tr);

                if (dataItem.Code == "Product") {

                    $("#treelist").find(".edit").addClass("hidden");
                    $("#treelist").find(".edit").removeClass("edit");
                    $("#treelist").find(".delete").removeClass("hidden");
                    $("#treelist").find(".delete").removeClass("delete");

                    treeList.saveRow(); // first save all other rows
                    treeList.editRow(tr[0]);
                };
            }); // double click function
        }; // Function CreatetreeList

        function onEdit(arg) {
            var tr = $(arg.container);//.closest("tr"); // get the current table row (tr)
            tr.find("#btndelete").addClass("hidden"); //remove btndelete from commandcolumn
            tr.find("#btndelete").addClass("delete"); //put class to select the btn later on
            tr.find("#btnupdate").removeClass("hidden"); //make btnupdate visible in commandcolumn
            tr.find("#btnupdate").addClass("edit"); //put class to select the btn later on
        };

        function update(e) { // update the edited row
            var tr = $(e).closest("tr"); // get the current table row (tr)
            var treeList = $("#treelist").data("kendoTreeList");
            treeList.saveRow();
            tr.find("#btndelete").removeClass("hidden");
            tr.find("#btndelete").removeClass("delete");
            tr.find("#btnupdate").addClass("hidden");
            tr.find("#btnupdate").removeClass("edit");
        };

        function addProduct(e) {
            var treeList = $("#treelist").data("kendoTreeList");
            var dataSource = treeList.dataSource;
            var data = dataSource.data;
            var tr = $(e).closest("tr"); // get the current table row (tr)
            var dataItem = treeList.dataItem(tr);

            dataSource.pushCreate({ Id: 15, Description: "New", Code: "Product", parentId: dataItem.Id });
            alert("Done");
        };

        function getIndexById(id) {
            var idx,
                l = EPDdata.length;

            for (var j; j < l; j++) {
                if (EPDdata[j].Id == id) {
                    return j;
                }
            }
            return null;
        }
    </script>
</body>
</html>
4

1 に答える 1

0

私は答えを見つけました!!!

データソースのページサイズは 10 に設定され、TreeList は paging: false に設定されました。すべてのテストで、10 ノードのサンプル データから始めました。別のノードを削除するまで表示されなかった11番目と12番目のレコードを常に追加していました...

こういったことは私だけに起こるのでしょうか?

于 2015-01-27T08:55:20.000 に答える