我有javascript函数对象EmployeeClass
。这些对象的字段由硬编码属性映射。
事件是在JQGrid jqGridAddEditAfterSubmit
上绑定的。在此功能内部,我能够读取JSON String对象,其中呈现一个正在更新/添加的行。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',...);
});
问题
上面的代码效果很好,如果没有动态添加字段。含义,Serveride可以添加自定义字段,并且这些字段被动态添加到JQGrid中,该字段可以在功能上很好地管理/编辑/添加。但是,我现在的问题是如何将我的EmployeeClass
对象提交给服务器,并具有动态添加的属性?我需要一些如何将EmployeeClass
扩展到绑定功能jqGridAddEditAfterSubmit
中,以便捕获JQGrid传递的所有属性并转换为EmployeeClass
希望这种情况可以解释我的问题。这都是关于在运行时动态扩展JavaScript函数对象。
答案
https://jsfiddle.net/salesforcedev/cwaek2ly/
基于JSON字符串中存在的新字段,我需要添加 相应的字段到我的函数对象
使用var keys = Object.keys(empJson)
之类的东西从JSON数据中获取键作为符号数组(字符串)。
然后使用循环检查您的功能是否使用.hasOwnProperty(keys[x])
具有这些键。
可以轻松地使用诸如 emp[keys[x]] = empJson[keys[x]]
之类的东西添加丢失的属性,其中x是新密钥的索引。请注意,键[x]只是一个字符串。