我正试图了解 KnockOut 数据绑定,并且我正在努力获得一个简单的表单来绑定到我的 ViewModel。
我正在使用 WebAPI 来拉回我的 JSON 数据。
这是我的 ViewModel,一旦调用了这个“查找”方法,它就会创建一个新的 WorkOrder 对象并填充一些属性(我已经对此进行了测试,它肯定会设置这些值)。
<script type="text/javascript">
function WorkOrder(workOrder) {
var self = this;
self.DistrictCode = workOrder.DistrictCode;
self.WorkOrderNumber = workOrder.WorkOrderNumber;
self.WorkOrderDescription = ko.observable(workOrder.WorkOrderDescription);
}
var apiUrl = 'api/workorders';
function WorkOrderViewModel() {
var self = this;
self.find = function() {
var id = $('#workOrderNumber').val();
$.getJSON(apiUrl + '/' + id)
.done(function(data) {
self.WorkOrder = new WorkOrder(data);
})
.fail(function(jqXHR, textStatus, err) {
$('#workorder').text('Error: ' + err);
});
}
}
$(document).ready(function() {
ko.applyBindings(WorkOrderViewModel());
});
</script>
这是我试图将 WorkOrder 类绑定到的 HTML 代码:
<h2>Work Order Details</h2>
<table>
<tr>
<td>
District Code:
</td>
<td>
<input data-bind="value: DistrictCode"/>
</td>
</tr>
<tr>
<td>
Work Order Number:
</td>
<td>
<input data-bind="value: WorkOrderNumber"/>
</td>
</tr>
<tr>
<td>
Work Order Description:
</td>
<td>
<input data-bind="value: WorkOrderDescription"/>
</td>
</tr>
</table>
我试过查看各种绑定上下文,但似乎没有一个能解决问题。如果我在 WorkOrderViewModel 中设置(例如)self.DistrictCode,我可以让它工作,但这不是我想要做的。
我错过了一些非常明显的东西吗?
编辑:我更接近一点,如果我添加到 WorkOrderViewModel 中,它会绑定。在 Ajax 调用之后仍然不会更新......
var DummyWorkOrder = { DistrictCode: "XXX", WorkOrderNumber: "1234560", WorkOrderDescription: "My Description" };
self.WorkOrder = new WorkOrder(DummyWorkOrder);