我想顯示一個可編輯的項目列表,其中的每個項目都是可編輯的(有點像可編輯的網格,有點像)。我正在使用KnockoutJS。我不能只使用一個簡單的可觀察數組,因爲文檔聲明「一個可觀察數組跟蹤哪些對象在數組中,而不是這些對象的狀態」KnockoutJS - Observable Array of Observable objects
因此,我創建了observableArray的可觀察對象(使用utils。 arrayMap),並將它們綁定到視圖。但是,問題是,如果我在屏幕上編輯數據,則用戶在屏幕上進行的任何數據輸入更改不會生效。請參閱http://jsfiddle.net/AndyThomas/E7xPM/
我在做什麼錯?
<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);
});
完美thanksssss! – Andrew 2017-05-31 16:11:12