2013-01-14 3 views
1

를 업데이트하지 계산 model.criteriaEntries.push를 (새 reportCriteria (paramshere));녹아웃 내가 JS에 다음 한

var criItem = ko.utils.arrayFirst(model.criteriaEntries(), function (item) { 
      return item.fieldId == id; 
     }); 
     if (criItem) { 
      criItem.filterOption = option; 
      criItem.optionText = opttext; 
      criItem.filterChoice = choice; 
      model.criteriaEntries.valueHasMutated(); 
     } 

내가 오류를 얻을 내가 디버깅 및 객체가 변경 볼 수 있지만 아무것도 화면에 변경하지 않기 때문에 계산 된 설명을 업데이트하지 않습니다 : 내가 그렇게 같은 일을 편집하려고 할 때까지

모두 좋아 보인다 값 추가에도 불구하고 HasMutated?

답변

4

문제는 criItem.optionText = opttext를 통해 optionText를 덮어 쓰는 것입니다.

하지 마십시오. 대신 optionText :

criItem.optionText(opttext); 

을 업데이트하십시오. 그러면 계산이 업데이트됩니다.


편집 다음은 보고서 작성 코드가 같아야 작업은 다음과 같습니다

function reportCriteria(fieldId,fieldName,filterOption,optionText,filterChoice) { 
    var report = { 
     fieldId: fieldI), 
     fieldName: fieldName, 
     filterOption: ko.observable(filterOption), 
     optionText: ko.observable(optionText), 
     filterChoice: ko.observable(filterChoice) 
    }; 
    report.description = ko.computed(function() { 
     return report.fieldName + " which " + report.optionText() + " " + report.filterChoice(); 
    }); 
    return report; 
} 

그리고 여기 당신의 편집 방법은 다음과 같습니다

var criItem = ko.utils.arrayFirst(model.criteriaEntries(), function (item) { return item.fieldId == id; }); 
if (criItem) { 
    criItem.filterOption(option); 
    criItem.optionText(opttext); 
    criItem.filterChoice(choice); 
} 
+0

를하지만 관측 – user1166905

+0

아니다 예 그것은. 당신이 올린 코드에서 optionText는 다음과 같이 설정됩니다 : optionText : ko.observable (optionText) –

+0

사과, 저의 실수입니다. 그 관측 가능하지 내가 위의 코드를 적절하게 변경했습니다. 그것이 관찰로 바뀌려고했기 때문에 나왔지만 아무런 차이가 없었습니다. 코드를 다시 복사하기 전에 코드를 복사해야합니다. 미안합니다. – user1166905