【问题标题】:DataBinding issue with knockout淘汰赛的数据绑定问题
【发布时间】:2013-10-08 19:20:12
【问题描述】:

当我尝试在页面加载时使用敲除绑定数据时,它工作正常。但是当回发时它会抛出一个错误“你不能多次将绑定应用于同一个元素。”并且数据以错误的方式重复。

脚本和视图如下。它从控制器返回所需的视图模型。

请帮我解决这个问题..

脚本:

> var dataCollection = ko.observableArray();
> 
> function loadShiftSummary() {
>     ko.cleanNode($("#shiftInfo"));
>     $.ajax({
>         url: 'testurl',
>         type: 'post',
>         contentType: 'application/json',
>         success: function (data) {           
>    
>             dataCollection = ko.mapping.fromJS(data.rosterViewModels);
>             ko.applyBindings(dataCollection, document.getElementById("shiftInfo"));
>         }
>     }); }

查看:

>  <tbody data-bind="foreach: dataCollection">
>         <tr>
>             <td data-bind="text: Description"></td>
>           
>             @for (int i= 0; date < 30; i++)
>             {
>                 <td data-bind="text: $data.CountArray()[@i]"></td>
>             }
>         </tr> 
> </tbody>

谢谢

【问题讨论】:

    标签: jquery asp.net-mvc data-binding knockout.js postback


    【解决方案1】:

    原因是,ko.applyBindings(dataCollection, document.getElementById("shiftInfo")); 被多次调用。

    我的建议是在你的文件中准备好放这个

    ko.applyBindings(dataCollection, document.getElementById("shiftInfo"));
    

    并将其从函数中删除

    function loadShiftSummary() {
    
        $.ajax({
            url: 'testurl',
            type: 'post',
            contentType: 'application/json',
            success: function (data) {           
    
                dataCollection(ko.utils.unwrapObservable( ko.mapping.fromJS(data.rosterViewModels)));
    
            }
        }); 
    }
    

    ko.applyBindings 每页/部分不应被多次调用

    【讨论】:

    • 这段代码 dataCollection = ko.mapping.fromJS(data.rosterViewModels);应该是 dataCollection(ko.mapping.fromJS(data.rosterViewModels)) 否则 dataCollection 将引用新数组,ui 将引用不同的数组,因此数据不会在 ui 中更新。
    • @DhanaKrishnasamy 是的,你是对的,我错过了那部分,现在更新代码,我通常也会在其周围添加 ko.utils.unwrapObservable
    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 2014-04-09
    • 1970-01-01
    • 2012-12-22
    • 2013-03-06
    • 2016-11-06
    • 1970-01-01
    相关资源
    最近更新 更多