Knockout.js KoGrid JSON动态小部件,带有嵌套的服务器调用

Knockout.js KoGrid JSON动态小部件,带有嵌套的服务器调用,knockout.js,Knockout.js,我正在使用KOGrid的仪表板上工作,我的想法是动态创建一组小部件,并将每个小部件的数据绑定到KOGrid中。我有两个控制器(MVC4),第一个控制器返回小部件名称列表,第二个控制器以JSON格式返回每个小部件的结果(datatable)。我使用JSON.NETJSONConvert将结果转换为JSON格式,然后作为JSON内容结果传递 我得到了“未捕获错误:初始化可观察数组时传递的参数必须是数组、null或未定义”。 嵌套的JSON调用是否存在问题?处理复杂对象数组并将其绑定到多个网格的最可靠

我正在使用KOGrid的仪表板上工作,我的想法是动态创建一组小部件,并将每个小部件的数据绑定到KOGrid中。我有两个控制器(MVC4),第一个控制器返回小部件名称列表,第二个控制器以JSON格式返回每个小部件的结果(datatable)。我使用JSON.NETJSONConvert将结果转换为JSON格式,然后作为JSON内容结果传递

我得到了“未捕获错误:初始化可观察数组时传递的参数必须是数组、null或未定义”。 嵌套的JSON调用是否存在问题?处理复杂对象数组并将其绑定到多个网格的最可靠方法是什么。使用knockout.mapping是否有帮助

var-widgets={}

var Widget = function (id, data) {
    this.id = ko.observableArray(id || []);     
    this.data = ko.observableArray(data || []);
};

var ViewModel = function (data) {
    var self = this;

    self.widgets = ko.observableArray(
                        ko.utils.arrayMap(data, function (i) {
                            return new Widget(i);
                        }));

    $.getJSON('Widgets/Get', null, function (data) {
        $.each(data, function (index, item) {
            $.getJSON('Home/GetWidgetDetails?widgetName=' + item.WIDGET_NAME,
                    function (result) {
                        self.widgets.push(new Widget({ id: item.WIDGET_NAME, data: result }));                            
                    });
        });
    });

};

 ko.applyBindings(new ViewModel(widgets));

我猜您在
小部件
类中的
数据
道具上遇到了这个错误?如果是这样,那么可能是
数据
数组的JSON结构。如果它们本身是复杂对象,那么应该重复对小部件执行的相同过程

  • 为这些项目创建对象定义。可能是
    WidgetItem
  • 使用
    ko.utils.arrayMap
    数据
    数组映射到
    WidgetItem
  • 成功

  • 在没有看到
    数据的结构的情况下,我无法给您提供更具体的信息。

    我猜您在
    小部件
    类中的
    数据
    属性上遇到了这个错误?如果是这样,那么可能是
    数据
    数组的JSON结构。如果它们本身是复杂对象,那么应该重复对小部件执行的相同过程

  • 为这些项目创建对象定义。可能是
    WidgetItem
  • 使用
    ko.utils.arrayMap
    数据
    数组映射到
    WidgetItem
  • 成功

  • 如果没有看到
    数据的结构
    的话,我无法给您提供更具体的信息。

    每个小部件都是不同的,比如说一个是客户,另一个是订单。我有一个通用的MVC控制器,它接受小部件名称,它将自动识别它背后的sql,执行它并以JSON格式返回结果(使用newtonsoft JsonConvert)。KOGrid是一个非常棒的控件,它可以绑定任何东西,但我认为它是一个击倒,这就是阻塞。如果有帮助的话,我可以在某个地方分享代码。可能吧。但是,不管怎样,如果你想把这些不同的小部件放在一个observableArray中,你需要有一个表示那个时候的类型。试着找出常见的属性,也许让一些名称足够通用,以处理不同的小部件。如果你给我一些具体的例子,我可以帮你解决这个问题。每个(数据,函数(索引,项){var li=“
  • ”;div.append(li);$(“#”+item.WIDGET_NAME+“\u li”).append(“”;$.getJSON('Home/GetWidgetDetails?widgetName=”+item.WIDGET_NAME),函数(数据){ko.attach(item.WIDGET_NAME+“Title”),{Title:ko.observable(item.WIDGET_NAME+“Title”),myObsArray:ko.observatarray(data)};};});每个小部件都是不同的,比如说一个是客户,另一个是订单。我有一个通用的MVC控制器,它接受小部件名称,它将自动识别它背后的sql,执行它并以JSON格式返回结果(使用newtonsoft JsonConvert)。KOGrid是一个非常棒的控件,它可以绑定任何东西,但我认为它是一个击倒,这就是阻塞。如果有帮助的话,我可以在某个地方分享代码。可能吧。但是,不管怎样,如果你想把这些不同的小部件放在一个observableArray中,你需要有一个表示那个时候的类型。试着找出常见的属性,也许让一些名称足够通用,以处理不同的小部件。如果你给我一些具体的例子,我可以帮你解决这个问题。每个(数据,函数(索引,项){var li=“
  • ”;div.append(li);$(“#”+item.WIDGET_NAME+“\u li”).append(“”;$.getJSON('Home/GetWidgetDetails?widgetName=”+item.WIDGET_NAME),函数(数据){ko.attach(item.WIDGET_NAME+“Title”),{Title:ko.observable(item.WIDGET_NAME+“Title”),myObsArray:ko.observatarray(data)};};});该错误是由于id是oservablearray,而不仅仅是可见的。修复后错误消失了,但我仍然没有看到填充的网格,不知道下面的HTML中有什么错误
    • 该错误是由于id是oservablearray而不是仅可观察到的。修复后错误消失了,但我仍然没有看到填充的网格,不知道下面的HTML中有什么错误