是否可以使用本地数据在kendo LISTVIEW中编写CRUD操作?

时间:2013-11-09 17:57:58

标签: listview kendo-ui datasource local crud

我正在尝试使用listview 数据添加到本地json变量中。我已将数据数据包装在一个kendo数据源中,这是我的viewmodel的一部分。

问题是,到达传输中的“创建”操作时,我的本地数组已经已更新,但我的viewmodel.dataSource.data实际上是。如何在达到传输中的创建操作时更新本地数据阵列。

这是我的代码Jsfiddle

    var data =
        [{
            "ID": 3,
            "TopMenuId": 2,
            "Title": "Cashier",
            "Link": "www.fake123.com"
        },
        {
            "ID": 4,
            "TopMenuId": 2,
            "Title": "Deposit",
            "Link": "www.fake123.com"
        }
        ];

    var viewModel = kendo.observable({
        dataSource: new kendo.data.DataSource({
            transport: {
                read: function (options) {
                    alert("Read");
                    options.success(data);
                },
                create: function (options) {
                    debugger;

                    alert("Create");
                    alert(data.length);
                },
                update: function (options) {
                    alert("Update");
                },
                destroy: function (options) {
                    alert("Destroy");
                    alert(data.length);
                }
            },
            batch: true,
            pageSize: 4,
            schema: {
                model: {
                    id: "ID",
                    fields: {
                        ID: {
                            editable: false,
                            nullable: true
                        },
                        TopMenuId: {
                            editable: false,
                            nullable: true
                        },
                        Title: {
                            editable: true,
                            validation: {
                                required: true
                            }
                        },
                        Link: {
                            editable: true
                        }
                    }
                },
                data: "",
                total: function (result) {
                    result = result.data || result;
                    return result.length || 0;
                }
            },
        }),
    });

    //kendo.init($("#briefOverview"));
    $(document).ready(function () {

        kendo.bind($("#briefOverview"), viewModel);
        $(".k-add-button").click(function (e) {
            var listView = $("#listsContainer").data("kendoListView");
            listView.add();
            e.preventDefault();
        });
    });

1 个答案:

答案 0 :(得分:0)

调用传输中的create方法来实际更新您的dataSource,无论它是本地还是远程,您都应该这样做。

所以在你的案例中考虑一下:

  1. 您需要更新本地dataSource(附加元素)。
  2. 您需要分配一个id(当create完成id时,options.success有一个非默认值(在您的情况下是一个不同于null的值)。
  3. 最后,您应该使用从您的服务器(通常使用已分配的id)返回的元素(在本地)调用ID与您收到的相同但create create: function (options) { debugger; var item = options.data.models[0]; // assign an ID, here I pick a Kendo generated UID item.ID = kendo.guid(); data.push(item); alert("Create with ID: " + item.ID); alert(data.length); options.success(item); }, 1}}填充。
  4. 所以你的options.success方法应该是:

    update

    并在此修改了您的JSFiddle:http://jsfiddle.net/3ADTM/1/

    顺便说一句,您还应该在update: function (options) { alert("Update"); options.success(options.data.models[0]); }, 上调用{{1}}:

    {{1}}

    你最后的JSFiddle:http://jsfiddle.net/3ADTM/2/