如何防止Kendo MultiSelect在网格模板中编辑后丢失值?

时间:2018-03-14 19:22:46

标签: angularjs kendo-grid kendo-multiselect

我有一个显示以逗号分隔的值列表的网格,它有一个数组,可以在网格的模板编辑器中使用。 (在服务器上,我将逗号分隔列表转换为Kendo多选AngularJS指令的数组)。我几乎所有工作:在多选中显示,编辑和添加值。

只发生了一件奇怪的事情:在多选中添加一个值后,在编辑器中单击“保存”,然后重新打开编辑器,多选然后只显示其中一个 - 最近输入的值。我知道值存在并通过管道,因为值使其进入数据库。我可以刷新页面,打开编辑器,并在多选中正确显示所有值,包括我刚刚添加的值。

好像剑道"忘了"我重新打开编辑器时的大多数值。 如何防止这种情况? MultiSelect是否需要反弹到值?如果是这样,怎么样?

我尝试添加this onChange event,但没有效果。我没有added valuePrimitive没有效果。我尝试指定k-rebind,但它导致了错误。

这是text/x-kendo-template中使用的指令:

        <select kendo-multi-select
                id="zipCode"
                k-placeholder="'Enter zip codes...'"
                style="width: 225px"
                k-on-change="dataItem.dirty=true"
                k-auto-bind="false"
                k-min-length="3"
                k-enforce-min-length="true"
                k-data-source="options.zipCodeDataSource"
                k-data-text-field="'text'"
                k-filter="'startsWith'"
                k-filtering="options.zipCodeFiltering"
                k-no-data-template="'...'"
                k-ng-model="dataItem.zipArray"
                k-highlight-first="true" />

这是DataSource:

options.zipCodeDataSource = new kendo.data.DataSource({
    severFiltering: true,
    transport: {
        read: {
            url: serviceUrl + "ZipCode/Get",
            type: "GET",
            dataType: "json",
            contentType: jsonType,
            data: function (e) {
                // get your widget.
                let widget = $('#zipCode').data('kendoMultiSelect');
                // get the text input
                let filter = widget.input.val();
                // what you return here will be in the query string
                return {
                    filter: filter
                };
            }
        },
    },
    schema: {
        data: "data",
        total: "Count",
        model:
        {
            id: "text",
            fields: {
                text: { editable: false, defaultValue: 0 },
            }
        },
        parse: function (response) {
            return response;
        }
    },
    error: function (e) {
    }
});

如果我在{{dataItem.zipArray}}中显示<pre>所有预期值 那里。

我想知道是否需要在kendo网格定义中的编辑事件处理程序中添加某些内容,但我不确定它会是什么。我必须为dropdownlist指令进行绑定。

    edit: function (e) {

        if (e.model.marketId === 0) {
            e.container.kendoWindow("title", "Add");
        } else {
            e.container.kendoWindow("title", "Edit");
        }

        // re-bind multi-select here??

        // These two lines actually cause the multiselect to lose pre-existing items in dataItem.zipArray
        // var multiselect = kendo.widgetInstance(angular.element('#zipCode'));
        // multiselect.trigger('change');
    }

...

更新

This dojo demonstrates the issue

  1. 运行dojo
  2. 编辑“合同”网格中的第一条记录
  3. 添加邮政编码,例如22250
  4. 点击保存
  5. 然后再次点击第一行的编辑
  6. 编辑器中仅显示邮政编码22250
  7. 此外,我注意到如果我将k-min-length="3"更改为k-min-length="1",则问题就会消失。但在我正在进行的工作中,它必须是3

1 个答案:

答案 0 :(得分:2)

这似乎是剑道本身的一个问题。当时报告了此问题 here.

好的,根据telerik的回复,此问题已在2017 R3 SP1发布(2017.3.1018)中修复。您可以使用此更新的dojo示例进行验证:

http://dojo.telerik.com/IREVAXar/3