【问题标题】:How to extend javascript Function object using jquery to add new attributes?如何使用 jquery 扩展 javascript Function 对象以添加新属性?
【发布时间】:2017-03-13 04:05:50
【问题描述】:

我有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 中,它可以很好地管理显示/编辑/添加功能。但是,我现在的问题是,如何将我的EmployeeClass 对象提交到具有动态添加属性的服务器?我需要一些如何在我的绑定函数jqGridAddEditAfterSubmit 中扩展我的EmployeeClass,以便捕获 jqgrid 传递的所有属性并转换为EmployeeClass

希望这种情况能解释我的问题。这完全是关于在运行时动态扩展 javascript 函数对象。

回答

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

【问题讨论】:

  • 没有像 "json object" 这样的东西——JSON总是是一个字符串,或者它不是 JSON。
  • 你明白我的问题了吗?不理解这个问题,高声誉的人怎么能在没有正当理由的情况下投反对票?
  • 我不明白你的问题,也不是minimum, complete, verifiable example——所以我否决了它并投票决定将其关闭为“不清楚你在问什么”,因为......目前还不清楚你在问什么。我的名声与此无关。
  • 在这种情况下,您应该要求更详细的解释。
  • 教你how to ask a good question实际上不是我的责任——相关:rubber duck debugging正在向橡皮鸭详细解释你的问题。这个想法是,完全彻底地解释你的问题的行为通常会解决问题。您的问题使用了不正确的术语、不完整的代码粘贴、不良格式和拼写错误。您表现出最小的努力来寻求帮助,但期望得到高质量的答案。我很失望。

标签: javascript jquery jqgrid free-jqgrid


【解决方案1】:

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

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

然后使用循环来检查您的函数是否有使用.hasOwnProperty(keys[x]) 的那些键。

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

【讨论】:

  • [...]to get the keys from the JSON data[...] 如果empJson 真的是JSON,那么必须首先使用JSON.parse(empJson) 对其进行解析,以获取可以调用Object.keys 的常规JavaScript 对象。如果empJSON只是一个普通的JavaScript Object,那么它就不是JSON,可以直接使用Object.keys(empJson),但是那么JSON的命名是错误的。
  • 在这种情况下 jqGrid 应该已经处理了解析,假设指定了正确的 datatype: 选项。
  • 这可能是真的。但是[...]to get the keys from the JSON data[...]Object.keys(empJson) 的组合是错误的。如果empJson 确实包含 JSON 数据,那么它不会返回编码为 JSON 的对象的键,因为 JSON 数据是一个字符串。要么是 JavaScript 对象,然后Object.keys(empJson) 可以工作,要么是 JSON,然后必须对其进行解析。
  • 虽然您说得很对,但我假设“JSON 对象”所指的 dev.sforce,意味着 是从 JSON 数据创建的对象。具有讽刺意味的是,Javascript 是当今唯一没有 JSONObject 类的语言(因为它不需要)。
  • 我也很确定 OP 正在谈论一个 JavaScript 对象。然而,混淆 json 编码数据和 javascript 对象通常是这里关于 JSON 的许多问题的问题根源。如果 JS 文档讨论 JSON 数据,那么它总是一个字符串。所以如果你写一个答案,你总是必须使用正确的词。
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 2013-09-29
  • 2016-02-20
  • 2020-10-25
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多