将对象数组绑定到 Kendo 网格弹出多选
Binding array of object to Kendo grid popup multiselect
我正在尝试将一组 id-value 对绑定到 kendo 网格弹出编辑器。
创造新记录的一切都已准备就绪。弹窗编辑器加载自定义编辑器,成功提交数据到控制器
问题出在我尝试编辑记录时。记录在行中正确显示,但当我尝试编辑它时,多选不包含值。
网格标记
$("#ProjectSites-SubContract-grid").kendoGrid({
dataSource: {
type: "json",
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "Id",
fields: {
DateOfContract: { type: 'date', editable: true },
DateOfCompletion: { type: 'date', editable: true },
AmountOfContract: { type: 'number', editable: true },
Contractor: { defaultValue: { id: "", name: "" } }
}
}
},
},
columns: [
{
field: "ScopeOfWork",
title: "Scope of Work",
template: "#=parseScopeOfWork(ScopeOfWork)#",
editor: scopeOfWorkEditor
},
]
});
});
编辑工作范围
function scopeOfWorkEditor(container, options) {
$('<input data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>')
.appendTo(container)
.kendoMultiSelect({
dataSource: {
data: [
@foreach (var scopeOfWork in Model.AvailableScopeOfWork)
{
<text>{ id : "@scopeOfWork.Value", name : "@scopeOfWork.Text" },</text>
},
]
}
});
parseScopeOfWork -
这个方法伙计们遍历对象列表并连接名称。
function parseScopeOfWork(scopeOfWork) {
var result = "";
for (var i = 0; i < scopeOfWork.length; i++) {
result += scopeOfWork[i].Name;
if (i < scopeOfWork.length - 1)
{
result += ", <br/>";
}
}
return result;
}
截图如下:
您正在将 SpaceOfWork
绑定到新的小部件,但该小部件如何知道您的模型?我的意思是,仅使用 data-bind
不会将模型绑定到小部件,它无法自行计算。我有两个建议:
在小部件的初始化中设置值:
.kendoMultiSelect({
value: options.model.ScopeOfWork
将模型永久绑定到小部件:
let $multiSelect = $('<input data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>');
kendo.bind($multiSelect, options.model);
$multiSelect
.appendTo(container)
.kendoMultiSelect({ ...
注意:编辑两个演示中的类别单元格以查看更改。
我正在尝试将一组 id-value 对绑定到 kendo 网格弹出编辑器。
创造新记录的一切都已准备就绪。弹窗编辑器加载自定义编辑器,成功提交数据到控制器
问题出在我尝试编辑记录时。记录在行中正确显示,但当我尝试编辑它时,多选不包含值。
网格标记
$("#ProjectSites-SubContract-grid").kendoGrid({
dataSource: {
type: "json",
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "Id",
fields: {
DateOfContract: { type: 'date', editable: true },
DateOfCompletion: { type: 'date', editable: true },
AmountOfContract: { type: 'number', editable: true },
Contractor: { defaultValue: { id: "", name: "" } }
}
}
},
},
columns: [
{
field: "ScopeOfWork",
title: "Scope of Work",
template: "#=parseScopeOfWork(ScopeOfWork)#",
editor: scopeOfWorkEditor
},
]
});
});
编辑工作范围
function scopeOfWorkEditor(container, options) {
$('<input data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>')
.appendTo(container)
.kendoMultiSelect({
dataSource: {
data: [
@foreach (var scopeOfWork in Model.AvailableScopeOfWork)
{
<text>{ id : "@scopeOfWork.Value", name : "@scopeOfWork.Text" },</text>
},
]
}
});
parseScopeOfWork - 这个方法伙计们遍历对象列表并连接名称。
function parseScopeOfWork(scopeOfWork) {
var result = "";
for (var i = 0; i < scopeOfWork.length; i++) {
result += scopeOfWork[i].Name;
if (i < scopeOfWork.length - 1)
{
result += ", <br/>";
}
}
return result;
}
截图如下:
您正在将 SpaceOfWork
绑定到新的小部件,但该小部件如何知道您的模型?我的意思是,仅使用 data-bind
不会将模型绑定到小部件,它无法自行计算。我有两个建议:
在小部件的初始化中设置值:
.kendoMultiSelect({ value: options.model.ScopeOfWork
将模型永久绑定到小部件:
let $multiSelect = $('<input data-text-field="name" data-value-field="id" data-bind="value:ScopeOfWork"/>'); kendo.bind($multiSelect, options.model); $multiSelect .appendTo(container) .kendoMultiSelect({ ...
注意:编辑两个演示中的类别单元格以查看更改。