Kendo Grid:在组合框选择上设置模型字段会打破jcombobox向上/向下箭头滚动

时间:2015-02-16 05:35:14

标签: kendo-ui kendo-grid

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

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

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);      

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

这似乎完全符合我的要求,但我刚才有人向我指出,当你使用向上/向下箭头键滚动组合框时,它似乎只是在列表中的2个值之间切换,而不是迭代所有项目。如果我删除了2'options.model.set'语句,那么组合就会表现出来。

我真的希望有一项工作可以解决这个问题,但我所尝试的一切都没有什么不同。

如果有任何建议要完成此操作,我们将不胜感激!

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

由于您手动修改了模型,因此您应该从输入中删除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中,您使用&#34; C1&#34;作为rego,在另一个&#34; CAR1&#34;)。

demo