2017-03-13 12 views
-2

私はjavascript関数オブジェクトEmployeeClassを持っています。このオブジェクトのフィールドは、ハードコーディング属性によってマップされます。jqueryを使用して新しい属性を追加するjavascript関数オブジェクトを拡張する方法は?

イベントは、jqgrid jqGridAddEditAfterSubmitでバインドされます。この関数の中で、私は行が更新/追加されていることを示すjson stringオブジェクトを読むことができます。 JSON文字列は、次のようなものを表している。

{ 
"Id":"xxx", 
"FirstName":"Mr. B", 
"LastName":"Ross", 
... 

} 

Functionオブジェクトの定義:

//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',...); 
}); 

質問

フィールドが動的に追加されない場合、上記のコードはうまくいきます。つまり、serversideはカスタムフィールドを追加することができ、これらのフィールドは表示/編集/追加を機能的に美しく管理するjqgridに動的に追加されます。しかし、私の問題は、動的に追加された属性を持つサーバに私のEmployeeClassオブジェクトを提出する方法です。私は私がjqgridから渡されたすべての属性をキャプチャし、このシナリオでは、私の問題を説明しEmployeeClass

希望に変換するように私の結合機能jqGridAddEditAfterSubmit内の私のEmployeeClassを拡張する方法をいくつかが必要です。これは、実行時に動的にjavascript関数オブジェクトを拡張することに関するものです。

ANSWER

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

+2

JSONは*常に*文字列であるか、JSONではありません。 – naomik

+0

あなたは私の質問を理解しましたか?どのように高い評判の人が正当な理由なしに投票を行うことができますか? –

+0

私はあなたの質問を理解していないし、[完全な、検証可能な例でもない](http://stackoverflow.com/help/mcve) - 私はそれを投票し、 "あなたが求めているのは、あなたが何を求めているのかは不明だからです。私の評判はそれとは関係ありません。 – naomik

答えて

0

JSON文字列への本の新しいフィールドに基づいて、私は私の関数オブジェクト

使用に 対応するフィールドを追加する必要が取得するvar keys = Object.keys(empJson)のようなものJSONデータのキーをシンボルの配列(文字列)として返します。

次にループに関数.hasOwnProperty(keys[x])を使用しているかどうかを確認してください。

不足しているプロパティは、emp[keys[x]] = empJson[keys[x]]などの簡単な方法で簡単に追加できます。ここで、xは新しいキーのインデックスです。キー[x]は単なる文字列であることに注意してください。

+0

'JSONデータからキーを取得する[...]' 'empJson'が本当にJSONの場合は、まず' JSON.parse(empJson) 'を使って解析しなければなりません。 'Object.keys'を呼び出すことができます。 'empJSON'が普通のJavaScriptオブジェクトであれば、それはJSONではなく、' Object.keys(empJson) 'は直接使用できますが、JSONの命名は間違っています。 –

+0

この場合、正しい 'datatype:'オプションが指定されていると仮定すると、jqGridは構文解析を処理する必要があります。 – david25272

+0

それは本当かもしれません。しかし、Object.keys(empJson)との組み合わせでJSONデータ[...]からキーを取得するための[...]という言葉は間違っています。 'empJson'に実際にJSONデータが含まれていると、JSONデータが文字列であるため、JSONとしてエンコードされたオブジェクトのキーは返されません。どちらかがJavaScript Objectの場合は、 'Object.keys(empJson)'が動作するか、JSONであり、次に解析する必要があります。 –

関連する問題