2012-11-09 3 views
2

그래서 표준 Customer -> Order -> OrderLineItems 유형의 라인을 따라 상당히 표준적인 중첩 모델 구현을 사용하는 응용 프로그램에 페이지가 있습니다. 그 차이점은 OrderLineItems의 모델이 꽤 복잡하다는 것입니다.Knockoutjs - 호출 값이 너무 많이 잘못되었습니다?

관찰 할 수있는 배열과 관찰 가능 항목을 모두 사용하는 코드에서 내보기를 올바르게 업데이트하기 위해 "myObservable.valueHasMutated()"를 꽤 많이 호출하는 것으로 나타났습니다.

이 작업을 수동으로 수행해야하는 것은 아닙니다. 그러나 변경해야 할 부분을 알 수있는 위치를 모르겠습니다. 그래서 몇 가지 질문 :

  1. "deep/big"모델의 경우 정상입니까?
  2. 이 문제를 해결하기 위해 내가 알아챌 수있는 확실한 것이 있습니까?
  3. KO로 구현 된 이와 같은 복잡한 모델의 예가 있습니까?

내 뷰 모델이 무엇인지의 예 :

버튼 요소에 묶여
self.projectsVisible = ko.observable(false); 
self.toggleProjectVisibility = function() { 
    self.projectsVisible(!self.projectsVisible()); 
    self.projectsVisible.valueHasMutated(); 
}; 

및 DIV가 :

<div data-bind="visible: projectsVisible"> 
    <table> 
     <thead data-bind="template: {name: 'projectHeader'}"></thead> 
     <tbody data-bind="template: {name: 'project', foreach: projects}"></tbody> 
    </table> 
</div> 
<button type="button" data-bind="click: toggleProjectVisibility"> 
    Toggle Projects On/Off 
</button> 
+5

어쩌면 jsFiddle에서 문제가있는 것을 얻을 수 있습니까? 'valueHasMutated'를 직접 호출해야하는 경우는 거의 없습니다. 일반적으로 observable/observableArray가 보유하고 업데이트를 트리거하려는 객체/배열을 직접 수정할 때 또는 구독을 만들었을 때 즉시 트리거하려고 할 때이 옵션이 사용됩니다. 부울을 토글하는 상황에서는 필요하지 않습니다. 나는 jsFiddle이 우리가 그것을 좁히는 것을 도울 것이라고 생각한다. –

+0

나는 비슷한 문제가 있었다. JSFiddle 여기에 : http://jsfiddle.net/b22Ex/2/ 이 질문에 http://stackoverflow.com/questions/15798881/kogrid-update-cell 그것은 내게 valueHasMutated()를 호출하는 것이 좋습니다 변경 사항이 적용됩니다. – krasnaya

답변

0

내가 observableArray 변화를 주로 valueHasMutated를 사용합니다.

값이 항상 변경되므로 self.projectsVisible(!self.projectsVisible());은 이미 구독자에게 알립니다. 따라서 valueHasMutated을 호출하면 구독자에게 동일한 값 변경에 대해 두 번째로 알립니다.

당신이 바이올린 확인할 수 있습니다

: 값이 동일하게 유지하더라도 당신이 관찰에 write 작업의 가입자에게 통지 할 경우 http://jsfiddle.net/5RU7n/

을, 당신은 .extend({ notify: 'always' }) 익스텐더 (http://knockoutjs.com/documentation/observables.html 참조)를 사용할 수 있습니다.

마지막으로, valueHasMutated으로 전화를 걸면 상황을 열거 할 수 있다고 생각합니다. 중복 통화로 인한 결과가 발생할 수 있습니다.

관련 문제