2013-07-19 1 views
2

(V. 1.2) 후에 업데이트 바인딩.녹아웃 관찰 만 녹아웃 관찰 가능한 처음 제외하고 AJAX 호출의 결과로 업데이트 된 후, 바인딩 업데이트하지 않고 Durandal 통해 녹아웃 사용 제 Ajax 호출

뷰 모델 :

define(["require", "exports"], function(require, exports) { 
    var About = (function() { 
     function About() { 
      var _this = this; 
      this.Code = ko.observable("Initial Content"); 
      $.get("MyXml.xml", function (data) { 
       return _this.DataLoaded(data); 
      }, "text"); 
     } 
     About.prototype.DataLoaded = function (data) { 
      this.Code(data.toString()); 
     }; 
     return About; 
    })(); 


    return About; 
}); 

보기 :

<div> 
    <h2>About</h2> 
    <p data-bind="text: Code"></p> 
</div> 

뷰 모델이 Durandals 작곡가를 통해보기에 결합되고,하지만 난 바닐라 마네와 같은 문제로 실행했습니다. 파일의 내용을 올바르게 볼이 구성되어 처음으로 표시되지만 뷰 후에 다시 이루어지는 경우, 결합은 초기 값 이후에 업데이트하지 않은 것. 파일이로드되고 observable을 업데이트하는 코드가 호출되며 오류가 발생하지 않습니다. 이전에 나는 setInterval을 함께 업데이트를 지연하는 것만으로 문제를 해결했습니다. 그것은 그것이 처음으로 작동한다는 사실과 결합하여 그것이 경쟁 조건 버그라고 제안합니다. 그러나 나는 그 문제가 무엇인지 알 수 없다.

당신이 관찰을 업데이트하지 말아야 어떤 기간이 있습니까? 그리고 이것을 피할 수있는 좋은 패턴이 있습니까?

지금은 그것을 업데이트하는 것이 안전 할 때 알 수있는 viewAttached 방법 (Durandal)를 사용하고,하지만 난 여전히 더 나은 솔루션을 근본 원인을 알고, 그리고 가능한 것입니다 정보 편집

.

답변

1

초기화하는 것이 안전해야합니다. 나는 또한 정품 인증 후크를 사용하고 거기에 약속을 반환합니다. 어떤 이벤트가 선호 이벤트인지 확실하지 않습니다. Ajax 호출의 약속이 없기 때문에 근본 문제가있는 것 같습니다. 변경하거나 최소한 async : false를 사용하여 $ .Ajax를 사용하십시오.

관련 문제