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