我有javascript函数对象EmployeeClass
。该对象的字段由硬编码属性映射。
事件绑定在jqgrid jqGridAddEditAfterSubmit
上。在这个函数里面,我能够读取json字符串对象,显示正在更新/添加的行。
json字符串表示如下:
{
"Id":"xxx",
"FirstName":"Mr. B",
"LastName":"Ross",
...
}
功能对象定义:
//EMPLOYEE
function EmployeeClass(empJson){
this.Id = empJson.Id;
this.FirstName = empJson.FirstName;
this.LastName = empJson.LastName;
...
...
}
绑定功能中使用的代码示例如下:
$("gridid").bind("jqGridAddEditAfterSubmit", function (e, rowid, event) {
var rowData = ...
..
..
//construct object for server
var oObject = new EmployeeClass(rowData);
//CALL SERVER SIDE API for store
SERVERREMOTE.call(oOject,'saveEmployee',...);
});
问题
如果没有动态添加字段,上面的代码效果很好。这意味着,服务器端可以添加自定义字段,并将这些字段动态添加到jqgrid中,jqgrid可以很好地管理显示/编辑/添加功能。但是,我现在的问题是,如何使用动态添加的属性将我的EmployeeClass
对象提交给服务器?我需要一些如何在我的绑定函数EmployeeClass
中扩展我的jqGridAddEditAfterSubmit
,以便捕获jqgrid传递的所有属性并转换为EmployeeClass
希望这个场景解释我的问题。这是关于在运行时动态扩展javascript函数对象。
ANSWER
答案 0 :(得分:0)
基于JSON字符串中的新字段,我需要添加 相应的字段到我的函数对象
使用var keys = Object.keys(empJson)
之类的东西将JSON数据中的键作为符号数组(字符串)。
然后使用循环检查您的函数是否具有使用.hasOwnProperty(keys[x])
的密钥。
可以使用emp[keys[x]] = empJson[keys[x]]
之类的内容轻松添加缺少的属性,其中x是新密钥的索引。请注意,keys [x]只是一个字符串。