【问题标题】: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 不存在。

所以

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

  2. 当我从 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 以确保数据可用。目前,这发生在顶部之前。这是你的问题。如果您需要进一步的帮助,我建议您创建一个小提琴,让我和其他人尝试为您解决它。

      【讨论】:

        猜你喜欢
        • 2016-12-08
        • 2017-06-19
        • 2016-12-09
        • 2018-10-19
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多