在异步函数中设置可观察值
Set value of observable in asynchronous function
我正在使用 DevExtreme 和淘汰赛。我想从服务器获取 JSON- 数据并将其保存到可观察对象中。
当前方法:
var dataArray = ko.observableArray();
var dataId = ko.observable("");
MyApp.overview = function (params) {
"use strict";
var viewModel = {
[...]
}
return viewModel;
};
function getDataFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
var entries = $.map(data, function (item) { return new entry(item) });
// first entry is ID
for (var i = 1; i < entries.length; i++) {
dataArray.push(entries[i]);
}
}
});
}
function getIDFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
dataId(data.ID);
}
});
}
function entry(data) {
this.A = data.A,
this.B = data.B,
this.C = data.C
}
我是这些场景的新手,所以我不确定我的方法是否正确。为了进行测试,我正在调用函数以通过按钮手动获取 JSON-Data,并且我获得了所需的数据,但是可观察对象都包含以下内容:
function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]}
我错过了什么?或者这种方法通常是不好的做法?
我的做法是使用 Knockout Mapping Plugin 和 fromJSON
命令(根据您的数据格式,您可能需要使用 fromJS
)这会映射数据从源头上。
function getDataFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
ko.mapping.fromJSON(data, {}, self.dataArray);
}
});
}
我正在使用 DevExtreme 和淘汰赛。我想从服务器获取 JSON- 数据并将其保存到可观察对象中。
当前方法:
var dataArray = ko.observableArray();
var dataId = ko.observable("");
MyApp.overview = function (params) {
"use strict";
var viewModel = {
[...]
}
return viewModel;
};
function getDataFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
var entries = $.map(data, function (item) { return new entry(item) });
// first entry is ID
for (var i = 1; i < entries.length; i++) {
dataArray.push(entries[i]);
}
}
});
}
function getIDFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
dataId(data.ID);
}
});
}
function entry(data) {
this.A = data.A,
this.B = data.B,
this.C = data.C
}
我是这些场景的新手,所以我不确定我的方法是否正确。为了进行测试,我正在调用函数以通过按钮手动获取 JSON-Data,并且我获得了所需的数据,但是可观察对象都包含以下内容:
function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]}
我错过了什么?或者这种方法通常是不好的做法?
我的做法是使用 Knockout Mapping Plugin 和 fromJSON
命令(根据您的数据格式,您可能需要使用 fromJS
)这会映射数据从源头上。
function getDataFromJson() {
$.ajax({
url: 'http://localhost:56253/test/3?format=json',
dataType: 'json',
success: function (data) {
ko.mapping.fromJSON(data, {}, self.dataArray);
}
});
}