私は、サーバーに投稿するためのクライアント側のデータコレクションを構築しています。 AddボタンのonClickイベントを使用して、私はフォームデータを収集し、それを内部配列に格納しています。これは問題のデモを試みるための偽のサンプルコードです(残念ながらソースを共有できません)。オブジェクトリファレンス変数宣言を超えて永続化
var getDataFromForm = (function() {
var _internal = {}; /* Based on feedback, I think this is the reason for the behavior I'm experiencing */
return function() {
var form = {};
/* Get the form data */
_internal.name = form.name;
_internal.id = form.id;
return _internal;
};
}());
var internal = { vals: [] };
function onClick() {
var newData = getDataFromForm();
doAjaxValidation({
success: function() {
internal.vals.push(newData); /* All values in array have been updated to this newData reference on click */
internal.vals.push(JSON.parse(JSON.stringify(newData))); /* ugly, but the reference is broken and future clicks work as expected */
internal.vals.push($.extend({}, newData)); /* reference to the object is still persisted through jQuery's extend */
}
});
}
は私がnewData
参照がnewData
各ボタンのクリックの新しい割り当てに手渡される理由として困惑しています。各クリックイベントは新しい関数呼び出しであり、newData
(理論上は)は、他のボタンクリックからのnewData
に関連しない新しいオブジェクトである必要があります。
私には何が欠けていますか?
編集:このサンプルははるかに大きなコードブロックからのものであり、可能な限り単純な表現に縮小しようとしました。明らかに、そのままでは、これは機能的なコードではありません。
私は問題がgetDataFromFormにあると推測しています...そのコードを共有できますか? – Prestaul
* "私は何が欠けていますか?" *確かに分かりませんが、私たちが欠けているのは、割り当て対象のオブジェクトを明らかに返すコードです。実際、オブジェクト自体は決して割り当てにコピーされません。コピーされる値は、オブジェクトへの参照です。 –
あなたはなぜあなた自身の質問を放棄しましたか? –