我有一些代码,当选择切换哪一行时,它会触发先前所选行的保存。
该行成功保存没有任何问题,但是successfunc
根本没有被调用 - 我的console.log
输出从未显示,并且此函数中的代码未运行。我也尝试将函数指定为aftersavefunc
,但无法使其工作。
看起来像一个简单的语法问题,但我不能完全正确。我没有正确指定此功能吗?
作为旁注,我意识到在一行保存之后重新加载整个网格似乎有些过分,但在这个特定代码片段的上下文中,在我的应用程序的更大结构中,这段代码是一个特例。
完整的jqGrid代码是:
var lastSelectedMainGridRowID = 0;
var lastSelectedSubGridRowID = 0;
var translationsFeed = "/update/translations/ajax/translations_feed.php";
var translationsEdit = "/update/translations/ajax/translations_edit.php";
var translationsSubGridFeed = "ajax/translations_subgrid_feed.php";
var translationsSubGridFeedEdit = "ajax/translations_subgrid_feed_edit.php";
$(document).ready(function () {
$("#translationsList").jqGrid({
caption : "Translations",
datatype : "xml",
url : translationsFeed,
editurl : translationsEdit,
mtype : "get",
pager : "#translationsPager",
rowNum : 20,
autowidth : true,
sortname : "phrase",
sortorder : "asc",
viewrecords : true,
multiselect : false,
hidegrid : false,
height : 300,
altRows : true,
rownumbers : true,
toolbar : [false],
loadComplete: function(data) {
jQuery("#translationsList").setSelection (0, true);
},
colNames : ["phrase_id", "translation_id", "language_cd", "Phrase", "Translation", "Modified", "Created", "Active"],
colModel : [
{ name : "phrase_id", index : "phrase_id", sortable : true, search : false, editable: true, edittype : "text", editrules: { edithidden: true }, hidden: true},
{ name : "translation_id", index : "translation_id", sortable : false, search : false, editable: true, edittype : "text", editrules: { edithidden: true }, hidden: true},
{ name : "language_cd", index : "language_cd", sortable : true, search : true, editable: true, edittype : "text", editrules: { edithidden: true, required : true }, hidden: true },
{ name : "Phrase", width:200, index : "phrase", sortable : true, search : true, editable: true, edittype : "text", editrules: { required: true } },
{ name : "Translation", width:200, index : "translation", sortable : true, search : true, editable: true, edittype : "text", editrules: { required: false } },
{ name : "Modified", width:100, index : "modify_dt", sortable : true, search : true },
{ name : "Created", width:100, index : "create_dt", sortable : true, search : true },
{ name : "Active", width:20, index : "active", sortable : true, search : true, editable: true, edittype: "checkbox", editoptions: {value:"Yes:No", checked: true} }
],
onSelectRow: function(id) {
jQuery('#translationsList').jqGrid('saveRow', lastSelectedMainGridRowID);
jQuery('#translationsList').jqGrid('editRow', id, true);
lastSelectedMainGridRowID = id;
},
subGrid: true,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id;
jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
jQuery("#"+subgrid_table_id).jqGrid({
url: translationsSubGridFeed + "?phrase_id=" + row_id,
editurl: translationsSubGridFeedEdit,
datatype: "xml",
colNames: ['phrase_id', 'translation_id', 'language_cd', 'Translations', 'Language', 'Active'],
colModel: [
{name:"phrase_id", index:"phrase_id", sortable: false, editable: true, edittype : "text", editrules: { edithidden :true }, hidden: true},
{name:"translation_id", index:"translation_id", sortable: false, editable: true, edittype : "text", editrules: { edithidden :true }, hidden: true},
{name:"language_cd", index:"language_cd", sortable: false, editable: true, edittype : "text", editrules: { edithidden :true }, hidden: true},
{name:"Translation", index:"translation", sortable: true, editable: true, edittype:"text", width:589},
{name:"Language", index:"language_disp", sortable: true, editable: false, width:250},
{name:"Active", index:"active", sortable: true, editable: true, edittype:"checkbox", editoptions:{value:"Yes:No", checked: true}, width:80}
],
height: "100%",
rowNum:20,
sortname: 'language_cd',
sortorder: "asc",
onSelectRow: function(id) {
jQuery("#"+subgrid_table_id).jqGrid('saveRow', lastSelectedSubGridRowID, function(response) {
console.log("Data: " + response.responseText);
return false;
});
jQuery("#"+subgrid_table_id).jqGrid('editRow', id, true);
lastSelectedSubGridRowID = id;
}
});
}
});
也许我不需要使用saveRow。在这种情况下,我正在做的是:
答案 0 :(得分:1)
我没有看到定义responseData
变量的代码的位置。代码responseData[0]
应抛出异常,因此console.log("Data: " + responseData[0]);
不会显示任何数据。代码行应该可以修改为
console.log("Server response: " + result.responseText);
UPDATED :如果没有两个网格的数据,例如子网格对应第一行,则无法调试代码。阅读不是那么有效。如果您发布了测试数据(两个XML文件),我可以尝试本地化问题。
一个重要的错误是您只声明subgrid_table_id
变量,但没有为其赋值。通常,根据subgrid_table_id
构建唯一ID名称subgrid_id
。例如
var subgrid_table_id = subgrid_id+"_t";
而不是var subgrid_table_id;
。
尽管我发现有些事情有点怀疑:
return false;
返回successfunc
。这意味着您将服务器响应解释为错误,并且应该中断对成功服务器响应的正常操作。我建议您另外使用saveRow的errorfunc
参数。在我的服务器代码中,服务器始终返回错误HTML状态代码,以防服务器出错。因此,我永远不需要使用successfunc
并仅使用aftersavefunc
和errorfunc
。extraparam
参数,而不是使用phrase_id
,translation_id
和language_cd
隐藏列{{3}} 1}}属性?