【问题标题】:Knockout JS binding and ajax taking longer to loadKnockout JS 绑定和 ajax 加载时间更长
【发布时间】:2013-06-29 15:23:43
【问题描述】:
我正在尝试使用以下数据进行 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 不要绑定/隐藏表格?
续Using KnockoutJS automatic binding
【问题讨论】:
标签:
knockout.js
knockout-2.0
【解决方案1】:
我做了一个小提琴,用计时器替换了服务器调用。
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>
See fiddle
希望对你有帮助。
【解决方案2】:
需要在 ajax 的回调中调用 ko.applyBinding 以确保数据可用。目前,这发生在顶部之前。这是你的问题。如果您需要进一步的帮助,我建议您创建一个小提琴,让我和其他人尝试为您解决它。