Backbone:从服务器获取数据到JQGrid

时间:2012-06-08 23:04:26

标签: javascript jqgrid backbone.js

我有一个当前使用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(...)”行时,一切都开始起作用了。

2 个答案:

答案 0 :(得分:1)

关键是fetch是异步的。因此,如果您在each之后立即致电fetch,那么您的收藏可能不会被填充。您应该使用success回调。例如,请查看this answer

答案 1 :(得分:0)

尝试使用数据类型:jsonstring并在集合上创建一个格式函数,以便为jqgrid提供核心数据格式。