Knockout.js 从AJAX调用中映射JSON
我开始使用敲除映射,我遗漏了一些明显的东西 当进行AJAX调用时,绑定失败,因为数据尚未返回。 是设置一个空的JSON响应来预推viewmodel,但对我来说这似乎不正确。如果可以删除对初始空JSON对象的要求,那就好了 有办法吗?写这篇文章时,我开始考虑将绑定延迟到第一个JSON查询返回之后Knockout.js 从AJAX调用中映射JSON,knockout.js,mapping,Knockout.js,Mapping,我开始使用敲除映射,我遗漏了一些明显的东西 当进行AJAX调用时,绑定失败,因为数据尚未返回。 是设置一个空的JSON响应来预推viewmodel,但对我来说这似乎不正确。如果可以删除对初始空JSON对象的要求,那就好了 有办法吗?写这篇文章时,我开始考虑将绑定延迟到第一个JSON查询返回之后 谢谢我将使用淘汰模板,如文档中所述。基本方法是将当前绑定到AJAX调用结果的HTML移到模板中 然后,在顶级视图模型上有一个属性,即通过AJAX调用获得的JSON结果: <div data-bind
谢谢我将使用淘汰模板,如文档中所述。基本方法是将当前绑定到AJAX调用结果的HTML移到模板中 然后,在顶级视图模型上有一个属性,即通过AJAX调用获得的JSON结果:
<div data-bind="template: { name: 'my-template', data: myAjaxResponse}"></div>
这里是一个简化的示例
$(function () {
$(function () {
function userposition(position, sduid, userName) {
this.position = ko.observable(position);
this.userId = ko.observable(sduid);
this.userName = ko.observable(userName);
}
function overallTablesViewModel() {
this.userpositions = ko.observableArray([]);
var userpositions = this.userpositions;
var options = {};
this.FilterClick = function () {
options =
{
Prop1: value,
Prop2: value
};
if (sportId < 1) {
toastr.error('You need to select a sport.');
return;
}
$.getJSON('url', options, function (json) {
var mappedData = ko.utils.arrayMap(json, function (up) {
return new userposition(up.Position, up.SDUID, up.UserName);
});
userpositions(mappedData);
});
};
}
//set up the viewmodel
var viewModel = new overallTablesViewModel();
ko.applyBindings(viewModel, $("#overallTablevm")[0]);
});
});
$(函数(){
$(函数(){
函数userposition(position、sduid、userName){
此位置=可观察的高(位置);
this.userId=ko.observable(sduid);
this.userName=ko.observable(用户名);
}
函数overallTablesViewModel(){
this.userpositions=ko.observearray([]);
var userpositions=this.userpositions;
var选项={};
this.FilterClick=函数(){
选择权=
{
建议1:价值,
建议2:价值
};
如果(运动ID<1){
toastr.error('您需要选择一项运动');
返回;
}
$.getJSON('url',选项,函数(json){
var mappedData=ko.utils.arrayMap(json,函数(up){
返回新的userposition(up.Position、up.SDUID、up.UserName);
});
用户位置(mappedData);
});
};
}
//设置viewmodel
var viewModel=新的全局表viewModel();
ko.applyBindings(viewModel,$(“#overallTablevm”)[0]);
});
});
我的示例是使用单击事件,但您可以将其去掉。您可以看到ViewModel
调用url
,返回的json
构建了userposition
的observearray
然后,视图将有一个保存数据的属性
userpositions
问题又出现了,并重新搜索
我发现,如果向下滚动到“Undefined Properties”,它建议在参数前面加“$data”
引用“在JavaScript中,尝试检索未定义的变量的值是错误的,但从另一个对象访问未定义的属性是可以的”
谢谢您的帮助,但这是一个几乎看不见的轻量级修复。您能显示您的
视图模型吗?你是怎么打这个AJAX电话的?我不明白这是怎么解决这个问题的?