如何为Kendo ComboBox设置值?options.models无值求协助
解决Kendo Grid中ComboBox编辑器值无法在options.models中获取的问题
看起来你遇到的核心问题是:自定义ComboBox编辑器在页面上显示正常,但提交create请求时,options.models为空,无法获取到选中的值。我来帮你分析几个可能的原因和对应的解决方案:
1. 先修正代码中的拼写和语法错误
首先看你的transport配置,有两个明显的错误:
paramterMap拼写错误,正确的应该是parameterMap,这个错误会直接导致你的参数映射函数不执行;return语句里多了一个分号,语法错误会阻止代码正常运行。
修正后的代码片段:
transport: { create: { url: "127.0.0.1/create", dataType: "jsonp" }, parameterMap: function(options, operation){ if (operation == "create"){ console.log(options.models); // 现在应该能输出内容了(如果模型正确更新的话) return {models: kendo.stringify(options.models)}; } } }
2. 确保自定义编辑器正确绑定Grid模型
这是最关键的一点:如果ComboBox没有正确把选中的值同步到Grid的数据源模型中,即使页面显示正常,options.models也会是空的。你需要检查myEditor函数的实现,确保满足以下几点:
正确设置编辑器的name属性
编辑器的输入框必须设置name为options.field,这样Kendo才能自动把值绑定到对应的模型字段:
function myEditor(container, options) { // 必须设置name为options.field,对应Grid列的field属性 $('<input name="' + options.field + '"/>') .appendTo(container) .kendoComboBox({ dataSource: { /* 你的ComboBox数据源配置,比如远程或本地数据 */ }, dataTextField: "cluster_name", // 显示在下拉列表中的文本字段 dataValueField: "cluster_name", // 实际绑定到模型的字段(根据你的数据结构调整) valuePrimitive: true, // 如果绑定的值是字符串/数字等基本类型,必须设置这个 change: function() { // 可选:手动强制更新模型值,确保同步 options.model.set(options.field, this.value()); } }); }
验证模型字段的可编辑性
如果你的Grid数据源配置了schema.model,要确保对应的cluster_name字段是可编辑的:
dataSource: { batch: true, schema: { model: { fields: { cluster_name: { editable: true, type: "string" } // 其他字段... } } }, // 其他配置... }
3. 确认模型被标记为"脏数据"
在batch模式下,只有被标记为dirty的模型才会被包含在options.models中。当你在ComboBox中选择值后,可以通过以下方式验证模型是否被正确标记:
// 在编辑器的change事件中打印模型状态 change: function() { options.model.set(options.field, this.value()); console.log(options.model.dirty); // 应该输出true }
如果以上步骤都正确执行,你应该能在parameterMap的console.log中看到包含选中值的模型数据了。
内容的提问来源于stack exchange,提问作者user9661792
相关产品推荐
相关产品推荐

