首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KoGrid JSON动态小部件

KoGrid JSON动态小部件
EN

Stack Overflow用户
提问于 2012-07-25 08:02:42
回答 1查看 846关注 0票数 1

我在一个仪表板上工作,我使用的是KOGrid,我的想法是动态创建一组小部件,并将数据绑定到每个小部件的kogrid中。问题在于敲除绑定,我在动态创建DIV时使用myObsArray,并且在视图模型中使用相同的DIV,这导致所有小部件都绑定到相同的数据(即,因为它是可观察的,所以覆盖了所有小部件的最后一个小部件的数据)。我通过关联数组解决这个问题的所有尝试都是徒劳的。非常感谢您的帮助。提前谢谢你一百万。

我有两个控制器(MVC4),第一个返回小部件名称列表,第二个返回JSON格式的结果(datatable)。我使用json JsonConvert将结果转换为JSON格式,然后作为JSON内容结果传递。当我使用一个小部件时,一切都很好,但问题是当我使用多个小部件时。

代码语言:javascript
复制
function loadWidgets(data) {
        //showLoading();
        var div1 = $("#db-col-1");
        var div2 = $("#db-col-2");
        div1.html('');
        div2.html('');
        $.each(data, function (index, item) {

            var li = "<li id='" + item.WIDGET_NAME + "_li'></li>";
            if (index % 2 == 0)
                div1.append(li);
            else
                div2.append(li);

            $("#" + item.WIDGET_NAME + "_li")
            .append("<div id= '" + item.WIDGET_NAME + "' class='example' data-      bind='koGrid: { data: myObsArray }'></div>"); //,
            LoadJson(item.WIDGET_NAME, item.WIDGET_NAME + "Arr" );

        });
    }


   function LoadJson(widgetName) {
        var wName = widgetName;
        $.getJSON('Home/GetWidgetDetails?widgetName=' + wName, 
            function (data) {
                window.viewModel = {
                        myObsArray: ko.observableArray(data) //myObsArray
                    };                                                                  
                    ko.applyBindings(viewModel);
                });        
    }

谢谢你,沙希

EN

回答 1

Stack Overflow用户

发布于 2012-07-26 00:24:33

首先,不要在可以多次调用的函数中调用ko.applyBindings。对于每个视图模型,此调用应该只发生一次。这个问题最近经常出现,我开始认为有人在某个糟糕的教程中做到了这一点。

第二,你的问题是你覆盖了你的视图模型。这里有一点:

代码语言:javascript
复制
window.viewModel = {
    myObsArray: ko.observableArray(data) //myObsArray
};

第一次调用它时,它会创建视图模型。second+时代,它会覆盖你的视图模型。此外,以编程方式创建HTML是不必要的。Knockout更适合使用foreach绑定来完成此任务。你似乎错过了很多knockout应该做的事情,所以我鼓励你通过the tutorials,如果你还没有这样做的话。最后,您的HTML将会无效。您正在制作没有olulli节点。

这里有一个解决你的问题的MVVM解决方案,in a fiddle。它被简化为演示绑定概念,并且不使用koGrid

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11640987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档