如何使用jquery扩展javascript函数对象来添加新属性?

时间:2017-03-13 04:05:50

标签: javascript jquery jqgrid free-jqgrid

我有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

https://jsfiddle.net/SalesforceDev/cwaek2Ly/

1 个答案:

答案 0 :(得分:0)

  

基于JSON字符串中的新字段,我需要添加   相应的字段到我的函数对象

使用var keys = Object.keys(empJson)之类的东西将JSON数据中的键作为符号数组(字符串)。

然后使用循环检查您的函数是否具有使用.hasOwnProperty(keys[x])的密钥。

可以使用emp[keys[x]] = empJson[keys[x]]之类的内容轻松添加缺少的属性,其中x是新密钥的索引。请注意,keys [x]只是一个字符串。