我有一个当前使用JQGrid的Web应用程序,但我正在尝试引入Backbone.js来改进代码组织。我要做的是使用Collection从服务器获取数据,然后将JSON信息添加到我定义的JQGrid但我无法使其工作。我的JQGrid定义如下:
var tareasHumanasTable = $("#grillaTH").jqGrid({
datatype: 'local',
height: 'auto',
colNames:[ colNames...],
colModel:[ colModel...]
}
我的模型和集合定义如下:
window.TareaHumana = Backbone.Model.extend();
window.TareaHumanaCollection = Backbone.Collection.extend({
model: TareaHumana,
url: "bandejaTareas/buscarTH"
});
我有一个按钮,点击后启动服务器通信。现在这样做:
$(function(){
$("#botonBuscar").bind('click',function(){
var tareaHumanaList = new TareaHumanaCollection();
tareaHumanaList.fetch({data: $("#formBandejaTareas").serializeObject()});
//alert("tareaHumanaList.toJSON(): " + tareaHumanaList.toJSON());
tareaHumanaList.each(function(tareaHumana, i){
//alert("tareaHumana.toJSON(): " + tareaHumana.toJSON());
tareasHumanasTable.jqGrid('addRowData', (i + 1), tareaHumana.toJSON());
});
该代码根本不起作用。使用Firebug,我验证了服务器以正确的格式发送数据但代码无法正常工作。最奇怪的是,当我取消注释“alert(...)”行时,一切都开始起作用了。
答案 0 :(得分:1)
关键是fetch
是异步的。因此,如果您在each
之后立即致电fetch
,那么您的收藏可能不会被填充。您应该使用success
回调。例如,请查看this answer。
答案 1 :(得分:0)
尝试使用数据类型:jsonstring并在集合上创建一个格式函数,以便为jqgrid提供核心数据格式。