rro*_*oss 2 javascript json knockout.js
我正打算召唤一个返回Json的Api.我试图将这些返回的数据放入一个可淘汰的可观察数组中.我的视图模型如下所示:
var adminData = $.getJSON("/api/administrators");
//console.log(adminData);
var viewModel = {
administrators: ko.observableArray(adminData)
};
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
请求通过并返回一个对象,其中包含adminData中的预期数据,但是当我尝试将其添加到ko.observableArray时,我在控制台中得到了这个:初始化可观察数组时传递的参数必须是数组.我无法弄清楚如何将数据转换为数组以进行淘汰赛.
$.getJSON 在异步中.结果数据仅在回调中可用.它不可用作$.getJSON文档的返回值.文档从不提及返回值.
$.getJSON("/api/administrators", null, function(adminData, status, xhr){
var viewModel = {
administrators: ko.observableArray(adminData)
};
ko.applyBindings(viewModel);
});
Run Code Online (Sandbox Code Playgroud)
如果你需要进行单独的AJAX调用,你应该使用jQuery.whenSee Wait直到所有的jQuery Ajax请求都完成了吗?
$.when($.ajax("/api/administrators"), $.ajax("api/roles")).done(function(resp1, resp2){
ko.applyBindings({
administrators: ko.observableArray(resp1[0]),
roles: ko.observableArray(resp2[0]);
});
});
Run Code Online (Sandbox Code Playgroud)
以下是一些其他不太理想的解决方案,但它向您展示了幕后发生的事情.
如果您不介意请求彼此等待
$.getJSON("/api/administrators", null, function(adminData){
$.getJSON("/api/administrators", null, function(apiRoles){
ko.applyBindings({
administrators: ko.observableArray(adminData),
roles: ko.observableArray(apiRoles);
});
});
});
Run Code Online (Sandbox Code Playgroud)
如果你关心,它会更复杂,因为你需要跟踪请求已完成
var ajaxAdminData, ajaxApiRoles
$.getJSON("/api/administrators", null, function(adminData, status, xhr){
var ajaxAdminData = adminData;
// If the other call finished, apply the bindings
if (ajaxApiRoles) {
applyBindings();
}
});
$.getJSON("/api/administrators", null, function(apiRoles, status, xhr){
ajaxApiRoles = apiRoles;
// If the other call finished, apply the bindings
if (ajaxAdminData) {
applyBindings();
}
});
function applyBindings() {
ko.applyBindings({
administrators: ko.observableArray(ajaxAdminData),
roles: ko.observableArray(ajaxApiRoles);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6731 次 |
| 最近记录: |