2017-05-24 4 views
0

ich habe ein „Produkt“ Objekt mit Werten wie die aufeinander abhängig:JavaScript - Aktualisierung/neu initialisieren Objekt

function Product(object) { 
    this.object = object; 
    this.data = { 
    id: this.object.val(), 
    } 
} 

var product = new Product($('input[name="productId"]:checked')); 

Und ... es funktioniert. Ich möchte jedoch ganze Objekt auf Eingangsänderung neu zu initialisieren, wie ich sie hier einige bekam:

<input type="radio" name="productId" value="ONE" checked="checked" /> 
<input type="radio" name="productId" value="TWO" /> 

I neuen Wert manuell auf Änderungsereignis einstellen:

$(function() { 
    $('input[name="productId"]').change(function(e) { 
    e.preventDefault(); 
    product.object = $('input[name="productId"]:checked'); 
    }); 
}); 

Aber es wird nur ändern "object" -Wert und wirkt sich nicht auf andere Werte aus.

Ich kann natürlich jeden neuen Wert per Hand auf Change Event setzen, scheint aber nicht richtig, oder ?. Ich möchte mich nicht jedes Mal wiederholen, wenn ich das aktualisieren möchte, ich möchte dieses Objekt einfach neu generieren.

Für jetzt habe ich eine Problemumgehung mit öffentlichen Funktion in Produktobjekt und rufen Sie es dann auf Änderungsereignis.

this.updateData = function() { 
    this.data.id = this.object.val(); 
} 

Aber noch einmal, es ist nur wiederholt jede Erklärung und es wird ziemlich chaotisch sein, da mehr Objekteigenschaften als nur ein ‚id‘ erscheint.

Antwort

1

Möchten Sie jede Eigenschaft des Objekts ändern? Wenn das der Fall ist, warum dann nicht ein neues Objekt anstelle eines alten erstellen?

$(function() { 
    $('input[name="productId"]').change(function(e) { 
    e.preventDefault(); 
    product = new Product($('input[name="productId"]:checked')); 
    }); 
}); 

Aber wenn Sie das Objekt aus irgendeinem Grund behalten möchten, könnten Sie so etwas tun:

function Product(object) { 
    this.updateData = function(o) { 
    this.object = o; 
    if (!this.data) this.data = {}; 
    this.data.id = this.object.val(); 
    //etc... 
    } 
    this.updateData(object) 
} 
+0

In der Tat, ich erste Lösung in erster Linie versucht, .. i put „var nur Produkt "statt" Produkt "innerhalb des Änderungsereignisses. Nun, keine Ahnung warum :-) Zweite Lösung wird auch in Zukunft nützlich sein. Vielen Dank! – ficus

Verwandte Themen