Ich versuche, eine Eigenschaft auf einem JavaScript-Objekt zu deaktivieren, aber nicht das erwartete Ergebnis.De-referenzieren einer JavaScript-Eigenschaft aus einem Array
Ich habe eine Reihe von Knockout View-Modellen (ich glaube nicht, dass das Problem Knockout-spezifische ist), von denen jede eine beobachtbare, Selected
hat. Ich füge eine Subskription zu dieser Observablen hinzu, so dass eine Funktion crossSelectTargetLangs
aufgerufen wird, wenn der Wert Selected
geändert wird.
Darüber hinaus füge ich dieses Abonnement in eine for...
Schleife.
var tl = 0,
tlMax = allLangVMs.length,
vmLang,
selectedCode;
// for each 'vmLang' view-model in the 'allLangVMs' array...
for (; tl < tlMax; tl++) {
// local variable for the context view-model
vmLang = allLangVMs[tl];
// add the subscription to this observable
vmLang.Selected.subscribe(function() {
// de-reference the vmLang.Code property
selectedCode = (function(code) {
return code;
}(vmLang.Code));
// pass the de-ref'd value to the target function
crossSelectTargetLangs(selectedCode);
});
}
jedoch unabhängig davon, welche View-Modell hatte seine Selected
beobachtbaren aktualisiert, das Argument an die Zielfunktion übergeben ist immer die Code
aus dem letzten Elemente im Array, dh scheint es nicht zu sein, De-Referenzierung.
Was mache ich falsch?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Creating_closures_in_loops_A_common_mistake –