2013-06-22 35 views
0

當提交jqGrid表單時,我想爲編輯用例的URL添加'/ theRecordId'到URL,REST風格。這是不工作:JQGrid:動態創建一個帶有id的RESTFul URI

jQuery("#noteList").jqGrid('navGrid','#pager', 
    {addtitle:"Add New Note", clearAfterAdd: true}, 
    {addCaption:"Edit Note", mtype:"PUT" 
     ,onclickSubmit: function(rp_ge, postdata) { 
      rp_ge.url = editurl + '/' + postdata.id; } 
    }, 

    {addCaption:"Add New Note", mtype:"POST"}, 
    {}, 
    {}, 
    {} 
); 

這導致 「/ [myurl] /未定義」 被髮送到服務器(其中[myurl]是正確的初始editurl)。 所以動態的url操作似乎可行,但'id'是未定義的。什麼應該是'id'屬性的名字?我可以看到,作爲表單參數傳遞的是'id'。我也嘗試了noteId,它是顯示網格時輸入數據中的名稱,也是我用於jsonReader.id的名稱。也沒有工作。這個屬性名稱應該從哪裏來?

回答

2

可能您使用了爲舊版本的jqGrid創建的示例。當前版本的jqGrid使用{gridid}_id作爲id值的屬性。例如,如果您使用的網格的idnoteList,則noteList_idpostdata參數onclickSubmit的id屬性的名稱。瞭解後面,在撥打onclickSubmitbeforeSubmit後,房產名稱將從noteList_id更改爲id(請參閱the part of code),這一點很重要。

可以的onclickSubmit代碼解決以下

onclickSubmit: function (options, postdata) { 
    options.url = editurl + '/' + encodeURIComponent(postdata[this.id + "_id"]); 
} 

我包括JavaScript函數encodeURIComponent的號召,以確保URL將在id使用的任何字符情況下正確編碼。

+0

非常感謝Oleg,它像一個魅力一樣工作! jqGrid真的是一個非常強大和多功能的框架,但也很難學習!我希望你很快就會有一本書:) – Pablo

+0

不幸的是,我仍然有與DELETE用例相同的問題。這將返回/未定義:{MTYPE: 「DELETE」, \t \t \t onclickSubmit:功能(選項,POSTDATA){ \t \t \t options.url = editurl + '/' + encodeURIComponent方法(POSTDATA [this.id + 「_id」 ]); \t \t \t}} – Pablo

+0

@ user2309409:刪除表單的onclickSubmit的'postdata'格式非常簡單:如果您選擇了單個選擇並且是逗號分隔的所有行的id值,那麼您使用'multiselect :true'。所以如果你不使用jqGrid的'multiselect:true'選項,那麼你可以使用'options.url = editurl +'/'+ encodeURIComponent(postdata);'。我建議另外使用'serializeDelData:function(){return「」; }'。請參閱[答案](http://stackoverflow.com/a/7365228/315935) – Oleg