エディター テンプレートを使用して、剣道グリッドのポップアップを介してドロップダウン リストを表示しています。グリッドを埋めるための最初のクエリは/?$expand=ContactType
、 を使用します。ここContactType
で、 はルックアップ値で、Contact
は親レコードです。これは正常に機能し、グリッドには正しいデータと関連する が表示されますContactType
。ドロップダウンを表示するエディター テンプレートを定義し、ドロップダウンの正しい値が選択されているので、クリックしてedit
も機能します。
しかし、私の問題は新しいレコードを追加することです。クリックするadd
と取得します
ContactType が定義されていません。
これContactType
は、展開を使用しているため、データグリッドのデータソーススキーマで明示的に定義されていないため、理にかなっています。モデル定義に追加でき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()
},
});