我只是想知道是否从一个主javascript获取一个jqgrid事件并使用另一个函数形式的javascript分开它会工作吗?我想要做的就是这样。我有一个代码:
...//some code here
serializeGridData: function(postData) {
var jsonParams = {
'SessionID': $('#eSessionID3').val(),
'dataType': 'data',
'recordLimit': postData.rows,
'recordOffset': postData.rows * (postData.page - 1),
'rowDataAsObjects': false,
'queryRowCount': true,
'sort_fields': postData.sidx
};
if (postData.sord == 'desc')
{
...//some code here
}
else
{
...//some code here
}
return 'json=' + jsonParams;
},
loadError: function(xhr, msg, e) {
showMessage('errmsg');
},
...//some code here
我想获取此代码并将其写入另一个javascript文件并将其作为一个函数,以便我的其他文件可以使用这个...它可能吗?
我在我的其他javascrtip文件中创建了这样的内容,我计划将所有功能都放在其中。这是代码(functions.js):
function serialLoad(){
serializeGridData: function(postData) {
var jsonParams = {
'SessionID': $('#eSessionID3').val(),
'dataType': 'data',
'recordLimit': postData.rows,
'recordOffset': postData.rows * (postData.page - 1),
'rowDataAsObjects': false,
'queryRowCount': true,
'sort_fields': postData.sidx
};
if (postData.sord == 'desc')
{
...//some code here
}
else
{
...//some code here
}
return 'json=' + jsonParams;
},
loadError: function(xhr, msg, e) {
showMessage('errmsg');
}
}
这不起作用并显示消息语法错误。我不知道如何纠正这个问题。有谁可以帮助我。?
答案 0 :(得分:2)
首先回答你的问题。如果在 functions.js 文件中定义了一些全局变量,例如myGlobal
:
myGlobal = {};
myGlobal = serializeGridData: function(postData) {
// ... here is the implementation
};
你可以在另一个必须包含在 functions.js 文件中的JavaScript文件中使用它:
serializeGridData: myGlobal.serializeGridData
(只需在jqGrid定义中使用此参数)。
如果您想将serializeGridData
参数与大多数jqGrids中的值一起使用,则可以在 functions.js 文件中覆盖默认值serializeGridData
:
jQuery.extend(jQuery.jgrid.defaults, {
datatype: 'json',
serializeGridData: function(postData) {
// ... here is the implementation
},
loadError: function(xhr, msg, e) {
showMessage('errmsg');
}
});
在示例中,我另外默认datatype: 'xml'
jqGrid参数为datatype: 'json'
。它显示了您可以设置任何jqGrid参数的默认值。
我真正需要的是使用prmNames jqGrid参数来重命名标准jqGrid参数的一些defaulf名称。例如
prmNames: {
rows:"recordLimit",
sort: "sort_fields",
search:null,
nd:null
}
您将标准rows
参数重命名为recordLimit
,sidx
重命名为sort_fields
,并删除要发送的_search
和nd
参数。
此外,您可以使用postData
将某些属性定义为函数(有关详细信息,请参阅here)。例如:
postData: {
SessionID: function() {
return $('#eSessionID3').val();
},
rowDataAsObjects: false,
queryRowCount: true,
dataType: 'data',
recordOffset: function() {
var pd = jQuery("#list2")[0].p.postData;
return pd.recordLimit * (pd.page - 1);
},
json: function() {
var pd = jQuery("#list2")[0].p.postData;
return {
SessionID: $('#eSessionID3').val(),
dataType: 'data',
recordOffset: pd.recordLimit * (pd.page - 1),
rowDataAsObjects: false,
queryRowCount: true,
sort_fields: pd.sort_fields
};
}
}
我在这里使用了您当前使用的json
参数,并直接在将要发送的参数列表中添加SessionID
,queryRowCount
等参数。当然,仅发送一种方式(json
或其他方式)就足以发送您需要的附加信息。
答案 1 :(得分:0)
您正在混合函数声明和对象文字表示法。此语法:property: value
在使用对象文字表示法创建对象时使用:
var obj = {
prop: val,
prop2: val
};
serializeGridData
和loadError
是某个对象的属性,您无法通过将它们放入函数来定义它们。
一种方法是创建两个函数,一个用于serializeGridData
,另一个用于loadError
,例如。
function serialLoad(postData){
var jsonParams = {
//...
};
if (postData.sord == 'desc') {
//... some code here
}
else {
//... some code here
}
return 'json=' + jsonParams;
}
function onError(xhr, msg, e) {
showMessage('errmsg');
}
然后您可以将其他文件中的它们分配给对象:
// ... some code here
serializeGridData: serialLoad,
loadError: onError,
//... some code here
另一种方法是将有问题的对象传递给函数并在那里分配属性:
function attachLoadHandler(obj) {
obj.serializeGridData = function(postData) {
//...
};
obj.loadError = function(xhr, msg, e) {
//...
};
}
然后你必须将你创建的对象传递给该函数:
attachLoadHandler(obj);
但我认为第一种方法更容易理解。
答案 2 :(得分:0)
第二个例子是不正确的,因为你声明一个javascript对象是一个函数的主体,你可以做的是:
function serialLoad() {
// Return an object with the required members
return {
serializeGridData: function(postData) { ... },
loadError: function(xhr, msg, e) { ... }
};
}