我正在尝试使用以下数据进行KO映射
我尝试使用document.ready
中的ajax成功事件对其进行初始化var organisationData = data.d; var orgObject = { organisationsData: organisationData };
var newviewmodel = ko.viewmodel.fromModel(orgObject);
问题是ajax加载的时间要长得多,然后会弹出javascript错误,说viewmodel不存在。
所以
如果ajax成功加载后如何告诉Knockout重新绑定
无论如何,当我从ajax获取的数据为空时,我可以告诉KO不要绑定/隐藏表吗?
答案 0 :(得分:2)
我做了一个小提琴,用计时器替换了服务器调用。
JS:
var vm = {
items: ko.observableArray()
};
ko.applyBindings(vm);
setTimeout(function(){
var rawData =[
{name:'item1'},
{name:'item2'},
];
ko.mapping.fromJS(rawData, {}, vm.items);
// to ensure that name is an observable
var item1Name = vm.items()[0].name();
console.log(item1Name);
},1500);
查看:
<table>
<tbody data-bind="foreach : items">
<tr>
<td data-bind="text : name"></td>
</tr>
</tbody>
</table>
<span data-bind="visible : items().length == 0">Loading...</span>
我希望它有所帮助。
答案 1 :(得分:1)
您需要在ajax的回调中调用ko.applyBinding以确保数据可用。目前这种情况在此之前发生在顶部。这是你的问题。如果您需要进一步的帮助,我建议您创建一个问题小提琴,让我和其他人尝试为您解决。