如何使用jQuery扩展JavaScript函数对象来添加新属性



我有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]只是一个字符串。

最新更新