从另一个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'语句,那么组合就会表现出来。
我真的希望有一项工作可以解决这个问题,但我所尝试的一切都没有什么不同。
如果有任何建议要完成此操作,我们将不胜感激!
提前感谢您提供任何帮助
答案 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)