Knockout JS绑定和ajax加载时间更长

时间:2013-07-02 09:55:07

标签: knockout.js knockout-2.0

我正在尝试使用以下数据进行KO映射 DataSet

我尝试使用document.ready

中的ajax成功事件对其进行初始化
var organisationData = data.d; var orgObject = { organisationsData: organisationData }; 

var newviewmodel = ko.viewmodel.fromModel(orgObject); 

问题是ajax加载的时间要长得多,然后会弹出javascript错误,说viewmodel不存在。

所以

  1. 如果ajax成功加载后如何告诉Knockout重新绑定

  2. 无论如何,当我从ajax获取的数据为空时,我可以告诉KO不要绑定/隐藏表吗?

  3. 继续Using KnockoutJS automatic binding

2 个答案:

答案 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>

See fiddle

我希望它有所帮助。

答案 1 :(得分:1)

您需要在ajax的回调中调用ko.applyBinding以确保数据可用。目前这种情况在此之前发生在顶部。这是你的问题。如果您需要进一步的帮助,我建议您创建一个问题小提琴,让我和其他人尝试为您解决。