2

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

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

var 小部件 = {};

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));
4

1 回答 1

0

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

  1. 为这些项目创建一个对象定义。也许WidgetItem
  2. 用于ko.utils.arrayMapdata数组映射到WidgetItem.
  3. 成功。

虽然没有看到结构data,我不能给你更具体的东西。

于 2012-07-25T20:33:07.703 回答