2016-08-17 9 views
0

Ich verwende KendoUI und Angular, um ein sehr ähnliches Szenario wie in diesem Beispiel von Telerik Website zu implementieren. http://dojo.telerik.com/AreTa/2Kendo Datenquelle CRUD mit Vorlagen

Dies ist, was ich

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"/> 
<title>Kendo UI Snippet</title> 

<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.common.min.css"/> 
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.rtl.min.css"/> 
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.silver.min.css"/> 
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.mobile.all.min.css"/> 

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script src="http://kendo.cdn.telerik.com/2016.2.714/js/kendo.all.min.js"></script> 
</head> 
<body> 

<style>html { font: 12px sans-serif; }</style> 

<div id="grid"></div> 

<script> 
var sampleData = [ 
{ProductName: "Sample Name", Description: "Sample Description"} 
]; 

// custom logic start 

var sampleDataNextID = sampleData.length + 1; 

function getIndexByName(name) { 
var idx, 
l = sampleData.length; 

for (var j=0; j < l; j++) { 
if (sampleData[j].getIndexById == name) { 
return j; 
} 
} 
return null; 
} 

// custom logic end 

$(document).ready(function() { 
var dataSource = new kendo.data.DataSource({ 
transport: { 
read: function (e) { 
// on success 
e.success(sampleData); 
// on failure 
//e.error("XHR response", "status code", "error message"); 
}, 
create: function (e) { 
// assign an ID to the new item 
//e.data.ProductName = e.data; 
// save data item to the original datasource 
sampleData.push(e.data); 
// on success 
e.success(e.data); 
// on failure 
//e.error("XHR response", "status code", "error message"); 
}, 
update: function (e) { 
// locate item in original datasource and update it 
sampleData[getIndexByName(e.data.ProductName)] = e.data; 
// on success 
e.success(); 
// on failure 
//e.error("XHR response", "status code", "error message"); 
}, 
destroy: function (e) { 
// locate item in original datasource and remove it 
sampleData.splice(getIndexByName(e.data.ProductName), 1); 
alert("Delete Success"+e.data.ProductName) ; 
// on success 
e.success(); 
// on failure 
//e.error("XHR response", "status code", "error message"); 
} 
}, 
error: function (e) { 
// handle data operation error 
alert("Status: " + e.status + "; Error message: " + e.errorThrown); 
}, 
pageSize: 10, 
batch: false, 
schema: { 
model: { 
id: "ProductName", 
fields: {        
    ProductName: { validation: { required: true } },        
    Description: { type: "text"} 
} 
} 
} 
}); 

$("#grid").kendoGrid({ 
dataSource: dataSource, 
pageable: true, 
toolbar: ["create"], 
columns: [ 
{ field: "ProductName", title: "Mobile Phone" }, 
{ field: "Description", width: "120px" }, 
{ command: ["destroy"], title: "Action;", width: "200px" } 
], 
editable: "inline" 
}); 
}); 
</script> 
</body> 
</html> 

haben Und es funktioniert, wie es auf Telerik Website, das zu tun was ich will ist

Die Veränderung ist auf „create“, ich die Product wollen Feld ist ein Drop-Down-Feld anstatt eines Textfelds, das mit Werten gefüllt ist, die ich in einem anderen JSON (nicht in SampleData) habe. Das hat einen Wert (productName) und Beschreibung - Beschreibung Das Feld Beschreibung soll auch nicht typisierbar sein, sondern "erhalten" aus der Beschreibung des im Drop-down ausgewählten.

Kann jemand helfen?

Antwort

0

einen benutzerdefinierten Editor für die ProductName Feld verwenden:

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-columns.editor

http://demos.telerik.com/kendo-ui/grid/editing-custom

Anfügen eines change Handler der Dropdown und set() den entsprechenden Wert an die Description Feld des Datenelements (der eine Kendo UI Model-Instanz, die Sie bereits aus den Argumenten der Editor-Funktion haben).

http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#events-change

http://docs.telerik.com/kendo-ui/api/javascript/data/observableobject#methods-set

Sie müssen auch die direkte Bearbeitung des Description Feld verhindern. Dies kann leicht erreicht werden, wenn Sie für dieses Feld einen benutzerdefinierten "Editor" verwenden, der einfach den aktuellen Wert in einem <span> Element ausgibt.

Verwandte Themen