Kendo 网格:在组合框选择上设置模型字段会破坏组合框 up/down 箭头滚动

Kendo Grid: Setting Model fields on combox selection breaks the combobox up/down arrow scrolling

这是从另一个 得出的,当我们有一个数据源字段(和组合字段)和一个 json 对象(而不是一个简单的字符串)时,设置网格的选定字段).

因此,如果我们查看以下组合框的更改事件处理程序...

function createCombo(container, options, data) {
  var input = $('<input name="' + options.field + '" />')
  input.appendTo(container)
  input.kendoComboBox({
  autoBind: true,
  filter: "contains",
  placeholder: "select...",
  suggest: true,
  dataTextField: "display",
  dataValueField: "rego",
  dataSource: data,
  change: function () {                     
    var dataItem = this.dataItem();
    var dataField = options.field.split('.');

     var fieldName = dataField[0];          
     options.model.set(fieldName + '.rego', dataItem.rego);
     options.model.set(fieldName + '.display', dataItem.display);      
    }
 });
 }

我正在如下设置我的 2 个字段...

    options.model.set(fieldName + '.rego', dataItem.rego);
    options.model.set(fieldName + '.display', dataItem.display);      

(组合中的每个项目,网格数据源都有一个 json 对象,带有 'rego' 和 'display' 字段,请参阅完整示例 here

这似乎完全符合我的要求,但有人向我指出,当您使用 up/down 箭头键滚动组合框时,它似乎只是在 2 个值之间切换列表,而不是遍历所有项目。如果我删除 2 'options.model.set' 语句,则该组合将起作用。

我真的希望有解决办法,但我尝试过的一切都没有什么不同。

如果有任何建议可以完成,将不胜感激!

提前感谢您的帮助

由于您是手动修改模型,因此您应该从输入中删除 name=... 属性(否则网格也会修改模型;您也可以使用 name="car.rego" - 它有成为值字段 - 然后不在配置中设置组合框值)并且也只调用 set 你对模型所做的最后一次更改(否则,网格的保存事件将被触发两次,一次无效数据)。

所以你的编辑器看起来像这样:

function createCombo(container, options, data) {
    var dataField = options.field.split('.');
    var fieldName = dataField[0];

    var input = $('<input/>')
    input.appendTo(container)
    input.kendoComboBox({
        autoBind: true,
        filter: "contains",
        placeholder: "select...",
        suggest: true,
        dataTextField: "display",
        dataValueField: "rego",
        dataSource: data,
        value: options.model[fieldName].rego,
        change: function (e) {
            var dataItem = this.dataItem();
            options.model[fieldName]['rego'] = dataItem.rego;
            options.model.set(fieldName + '.display', dataItem.display);
        }
    });
}

此外,您的数据应该是一致的(在一个 DS 中,您使用 "C1" 作为 rego,在另一个 "CAR1" 中)。

(demo)