我正在使用编辑器模板通过弹出窗口显示剑道网格的下拉列表。填充网格的初始查询使用/?$expand=ContactType
, whereContactType
是查找值并且Contact
是父记录。这工作正常,网格显示正确的数据和关联的ContactType
. 单击edit
也可以工作,因为我已经定义了一个编辑器模板来显示下拉菜单并选择了下拉菜单中的正确值。
但是我的问题是添加新记录。当我点击add
我得到
ContactType 未定义。
这是有道理的,ContactType
因为我使用的是 expand,所以在 datagrid 的 datsource 模式中没有明确定义。我可以添加ContactType
到模型定义中,没问题,并且错误消失了 - 但是在发送更新时ContactType
是一个空字符串并且没有获取实际选择的值。 ContactType
是与Contact
我理解的相关实体,您不能使用它们确实具有 HierarchicalDataSource 但仅适用于树视图的相关实体来定义模型。
因此,给定网格弹出编辑器中的下拉列表,您如何获得Add new
发送选定的下拉值?
这是一些代码,TIA 寻求帮助
<script id="popup_editor" type="text/x-kendo-template">
<div class="k-edit-label">
<label for="firstName">First Name</label>
</div>
<input type="text" name="firstName" data-bind="value:firstName" />
<div class="k-edit-label">
<label for="middleName">Middle Name</label>
</div>
<input type="text" name="middleName" data-bind="value:middleName" />
<div class="k-edit-label">
<label for="lastName">Last Name</label>
</div>
<input type="text" name="lastName" data-bind="value:lastName" />
<input name="ContactType" data-source="myDropdownDS" data-text-field="name"
data-value-field="__KEY" data-bind="value:ContactType.__KEY" data-role="dropdownlist" />
</script>
<script>
//Local
var crudServiceBaseUrl = "http://127.0.0.1:8081/cors/";
var myGridDS = new kendo.data.DataSource({
type : "json",
transport : {
read : {
url : crudServiceBaseUrl + "Contact" + "/?$expand=ContactType",
dataType : "json",
type : "GET",
complete : function(jqXHR, textStatus) {
textStatus = "read";
}
},
update : {
url : crudServiceBaseUrl + "Contact" + "/?$method=update",
dataType : "json",
type : "POST",
complete : function(jqXHR, textStatus) {
textStatus = "update";
}
},
destroy : {
url : crudServiceBaseUrl + "Contact" + "/?$method=delete",
type : "GET",
complete : function(jqXHR, textStatus) {
textStatus = "destroy";
}
},
create : {
url : crudServiceBaseUrl + "Contact" + "/?$method=update",
dataType : "json",
type : "POST",
complete : function(jqXHR, textStatus) {
textStatus = "create";
}
},
errors : function(response) {
var errorData = $.parseJSON(e.responseText);
alert(errorData.errorMessage);
//$("#loading").innerHtml = "error";
},
parameterMap : function(options, operation) {
if (operation == "create") {
return JSON.stringify({
"__ENTITIES" : options.models
});
} else if (operation == "update") {
var isEdit = true
var myParentEntity = "Contact"
var myData = options.models[0];
//uri gets added after first edit from Wakanda response, not needed and causes update to fail so delete
// delete myData.uri;
//
configureDataRowRelations(myParentEntity, myData, isEdit)
return JSON.stringify({
"__ENTITIES" : options.models
});
}
}
},
serverPaging : true,
serverSorting : true,
serverFiltering : true,
batch : true,
pageSize : 30,
schema : {
model : {
id : "__KEY",
fields : {
__KEY : {
type : "string"
},
__STAMP : {
type : "number"
},
ID : {
editable : false,
nullable : true
},
firstName : {
type : "string",
validation : {
required : true
}
},
middleName : {
type : "string"
},
lastName : {
type : "string",
validation : {
required : true
}
},
ContactType : {}
}
},
data : "__ENTITIES"
}
});
var myDropdownDS = new kendo.data.DataSource({
type : "json",
transport : {
read : {
url : crudServiceBaseUrl + "ContactType",
dataType : "json",
type : "GET",
}
},
batch : true,
pageSize : 30,
schema : {
model : {
id : "__KEY",
fields : {
__KEY : {
type : "string"
},
__STAMP : {
type : "number"
},
ID : {
editable : false,
nullable : true
},
name : {
type : "string",
validation : {
required : true
}
}
}
},
data : "__ENTITIES"
}
});
$('#PopupContactContactTypeGrid').kendoGrid({
selectable : "row",
filterable : true,
pageable : true,
sortable : true,
dataSource : myGridDS,
toolbar : ["create"],
columns : [{
field : "ID"
}, {
field : "firstName",
title : "First Name"
}, {
field : "middleName",
title : "Middle Name"
}, {
field : "lastName",
title : "Last Name"
}, {
field : "ContactType.name",
title : "Contact Type"
}, {
command : ["edit", "destroy"],
title : " ",
width : "210px"
}],
editable : {
mode : "popup",
template : $("#popup_editor").html()
},
});