将对象数组复制到另一个数组是JQuery中的引用类型

时间:2014-06-10 07:07:37

标签: javascript jquery arrays knockout.js

我有一组对象TransactionVModel.FiltersList[] 当我将此数组复制到另一个数组fltrList[]并且如果我修改数组fltrList中的任何对象时,它是否会反映在JQuery中的数组TransactionVModel.FiltersList中?为了更清楚,下面是我的例子。按照我的说法,因为它是一个引用类型,它也应该更新数组TransactionVModel.FiltersList,但在我的场景中它没有发生,我能知道它为什么没有发生吗?

TransactionVModel.FiltersList在我的代码中声明为ko.observableArray();

function UpdateSelectedFilters(data) {
    var fltrList = [];
    fltrList = TransactionVModel.FiltersList();
    for (var i = 0; i < data.length ; i++) {
      var index = fltrList.indexOf(data[i]);
      if (index != -1) {
        var fltrObj = fltrList[index];
        var fltrValArr = [];
        fltrValArr = data.valueItems;
        for (var j = 0; j < fltrValArr.length; j++) {
        if (fltrValArr[j].IsSelected == true) {
        if (fltrObj.indexOf(fltrValArr[j]) != -1) {
            var selectedVal = fltrObj[fltrObj.indexOf(fltrValArr[j])];
            selectedVal.IsSelected = true;
                }
            } 
        }
    }
}

在我的场景中,我正在更新selectedVal.IsSelected属性,但它没有反映observableArray TransactionVModel.FiltersList

1 个答案:

答案 0 :(得分:0)

你需要告诉你淘汰你的阵列已经改变了valueHasMutated

function UpdateSelectedFilters(data) {
    var fltrList = [];
    fltrList = TransactionVModel.FiltersList();
    //...
    TransactionVModel.FiltersList.valueHasMutated();
}