2012-06-08 75 views
0

我有一個當前使用JQGrid的Web應用程序,但我試圖介紹Backbone.js以改進代碼組織。我想要做的是使用集合從服務器獲取數據,然後將JSON信息添加到我定義的JQGrid中,但我無法使其工作。我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,我驗證了服務器以正確的格式發送數據,但代碼不起作用。最奇怪的是,當我取消注意「警報(...)」行時,所有事情都開始奏效。

+0

你幾乎沒有發佈jqGrid代碼,也沒有測試JSON數據。我自己並不使用骨幹,但是你發佈的jqGrid用法的部分是非常不起作用的。 'addRowData'是填補網格最慢的方法。因爲你沒有填充它,所有的問題都可以在'tareaHumana.toJSON()'的數據中。數據必須對應網格的'colModel',但正如我在循環中使用'addRowData'之前所寫的那樣,這真是個壞主意。你應該更好地描述你如何填補網格。無論如何,一些JSON響應和colModel的例子是非常必要的。 – Oleg

+0

這個問題與JSON解析無關,它只涉及來自Backbone的異步提取。在網格人口中,我遵循以下建議:http://stackoverflow.com/questions/8646622/how-to-bind-backbone-model-to-jqgrid。你有其他想法嗎? –

+2

'addowData'的用法差別很大。我會改變你參考的演示[這一個](http://jsfiddle.net/qM98D/67/)。使用數據創建網格很重要*如果您創建網格並添加100行,那麼在插入* one *行或在頁面上更改* one *元素時,您會看到所有現有元素的位置將會重新計算*。通過使用'gridview:true,data:mydata'創建網格,您可以創建具有全身內容的網格作爲一個操作。您擁有的行數越多,就會看到差異。 – Oleg

回答

1

關鍵是fetch是異步的。因此,如果您在fetch之後立即撥打each,那麼您的收藏集可能不會填充。你應該使用success回調。例如,看看this answer

0

嘗試使用數據類型:jsonstring並在集合上創建一個格式化函數來爲jqgrid提供corect數據格式。

+0

與數據類型:'本地'它現在工作正常 –