使用 HTTP GET 从服务器异步获取的数据填充 KnockoutJS 支持的表单的惯用方法是什么?我遇到的问题是,如果我不创建域模型的空虚拟实例(请参见下面的代码),Knockout 会中断,因为它会在调用完成之前尝试调用domainModel().name
和domainModel().description
表单字段$.getJSON
。
处理这种情况的常用方法是什么?我应该先做第$.getJSON
一个并调用ko.applyBindings(new ViewModel(domainModelData));
成功回调还是有其他方法?
HTML 和内联 Javascript:
<form data-bind="submit: update">
<input id="name" data-bind="value: domainModel().name"/>
<input id="description" data-bind="value: domainModel().description"/>
<button type="submit"/>
</form>
<script type="text/javascript">
$(document).ready(function () {
ko.applyBindings(new ViewModel());
});
</script>
淘汰赛视图模型:
function DomainModel(data) {
var self = this;
self.id = ko.observable(data.id);
self.name = ko.observable(data.name);
self.description = ko.observable(data.description);
}
function ViewModel() {
var self = this;
// This feels somehow dirty
self.domainModel = ko.observable(new DomainModel({id: null, name: "", description: ""}));
self.update = function() {
...
};
$.getJSON("domainModel/<id>", function(domainModelData) {
self.domainModel(new DomainModel(domainModelData));
});
}