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)
这是从另一个
因此,如果我们查看以下组合框的更改事件处理程序...
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)