【发布时间】:2016-04-15 22:07:37
【问题描述】:
我对看似简单的想法有疑问。
我正在尝试从服务器提供的数据动态创建ko.observable()。
服务器正在向我发送一个 ~240 值的 JSON 数组。当我将它们放入在线表单时,我想为每一个创建一个 observable。
第一次尝试
function AppViewModel() {
var self = this;
var data = {};
$.getJSON("/record/20001", function(data) {
$.each(data, function(i, val) {
self.data[i] = ko.observable(val);
});
});
self.test = 5;
self.test2 = ko.observable(69);
}
vm = new AppViewModel();
ko.applyBindings(vm);
这样我无法访问任何数据。
第二次尝试哪个有效
function AppViewModel() {
var self = this;
self.abnorm_comment = ko.observable();
self.abnorm_test1 = ko.observable();
self.abo_sys_spec = ko.observable();
self.access_location = ko.observable();
self.ace_inhibit = ko.observable();
/*
A myriad of line like these, written by hand
*/
self.xray_other = ko.observable();
$.getJSON("/record/20001", function (data) {
$.each(data, function (i, val) {
self[i](val);
});
});
self.test = 5;
self.test2 = ko.observable(69);
}
我想做什么
function AppViewModel() {
var self = this;
var data = {};
$.getJSON("/record/20001", function (data) {
$.each(data, function (i, val) {
self.data[i] = ko.observable(val);
});
});
}
然后像这样访问它:
<input type="text" data-bind="value: data.case_id">
第一次尝试我的视图模型中没有数据。如果我在 Chrome 控制台中调出 vm 变量,它确实有数据。
我在这里做错了吗?第二种可行的方式在有这么多可观察对象时看起来不太好。
如果我遗漏了一些明显的东西,请告诉我
个人解决方案
最终我在应用绑定和 AJAX 服务器请求之间遇到了竞争条件。我也最终使用了@JotaBe 推荐的插件
【问题讨论】:
标签: javascript knockout.js knockout-mapping-plugin