Ich möchte eine bearbeitbare Liste von Elementen anzeigen, von denen jedes Element bearbeitet werden kann (gewissermaßen wie ein bearbeitbares Gitter, in gewisser Weise). Ich benutze KnockoutJS. Ich kann nicht nur ein einfaches Observable Array verwenden, da die Dokumentation besagt "Ein ObservableArray verfolgt, welche Objekte im Array sind, nicht den Zustand dieser Objekte". Also habe ich ein ObservableArray von Observable Objects erstellt (mit utils.KnockoutJS - Observable Array von Observable Objekten
). arrayMap) und verknüpfte sie mit der Ansicht. Das Problem ist jedoch, dass, wenn ich die Daten auf dem Bildschirm bearbeite, alle Dateneingabeänderungen, die der Benutzer auf dem Bildschirm vornimmt, nicht wirksam werden. Siehe http://jsfiddle.net/AndyThomas/E7xPM/
Was mache ich falsch?
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.0.0/knockout-min.js" type="text/javascript"></script>
<table>
<tbody data-bind="template: { name:'productListJavascriptTemplate', foreach: products}">
</tbody>
</table>
<script type="text/html" id="productListJavascriptTemplate">
<tr>
<td>Name: <input data-bind="value: Name"/></td>
<td>Name: <span data-bind="text: Name"/></td>
<td><select data-bind="options: this.viewModel.categories,
optionsText: 'Name', optionsValue: 'Id', value: CategoryId,
optionsCaption: 'Please select...'"></select></td>
<td>CategoryId: <input data-bind="value: CategoryId"/></td>
</tr>
</script>
var categoryList= [
{
Name: "Electronics",
Id: "1"},
{
Name: "Groceries",
Id: "2"}
];
var initialData= [
{
Name: "Television",
CategoryId: "1"},
{
Name: "Melon",
CategoryId: "2"}
];
var viewModel = {
products: ko.observableArray(
ko.utils.arrayMap(initialData, function(product) {
return ko.observable(product);
})),
categories: ko.observableArray(categoryList)
};
$(function() {
ko.applyBindings(viewModel);
});
perfekte thankssssss! – Andrew