Tôi muốn hiển thị danh sách các mục có thể chỉnh sửa, mỗi mục có thể chỉnh sửa được (loại giống như lưới có thể chỉnh sửa, theo cách này). Tôi đang sử dụng KnockoutJS. Tôi không thể sử dụng một mảng quan sát đơn giản bởi vì, tài liệu chỉ ra "Một đường quan sát được các đối tượng nằm trong mảng, không phải trạng thái của các đối tượng"KnockoutJS - Dải quan sát của các đối tượng quan sát
Vì vậy, tôi đã tạo một đối tượng quan sát được (sử dụng utils). arrayMap) và ràng buộc chúng vào khung nhìn. Tuy nhiên, vấn đề là nếu tôi chỉnh sửa dữ liệu trên màn hình, mọi thay đổi nhập dữ liệu mà người dùng thực hiện trên màn hình sẽ không có hiệu lực. Xem http://jsfiddle.net/AndyThomas/E7xPM/
Tôi đang làm gì sai?
<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 hoàn hảo! – Andrew