从数组内部取消引用 JavaScript 属性

De-referencing a JavaScript property from inside an array

我正在尝试取消引用 JavaScript 对象上的 属性,但没有得到预期的结果。

我有一组 Knockout 视图模型(我认为问题不是 Knockout 特有的),每个模型都有一个可观察的 Selected。我添加了对此可观察对象的订阅,以便在 Selected 的值更改时调用函数 crossSelectTargetLangs

此外,我将此订阅添加到 for... 循环中。

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);
    });
}

但是,无论哪个视图模型更新了其 Selected observable,传递给目标函数的参数始终是数组中最后一个元素的 Code它似乎没有取消引用。

我做错了什么?

问题是您在错误的地方取消引用。 代码应如下所示:

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];

    (function(vmLangParam) {   
      vmLangParam.Selected.subscribe(function() {   
          crossSelectTargetLangs(vmLangParam.Code);
      });
    })(vmLang);
    
}