2014-02-15 3 views
0
로 녹아웃을 바인딩에

은 누군가가 나에게 다음과 같은 두 가지 RateCardViewModel 기능내가 webapi

$(document).ready(function() { 
    ko.applyBindings(new RateCardsViewModel(1)); 
}); 

function RateCardsViewModel(projectId) { //This version binds as expected 
    var self = this; 
    self.rateCards = ko.observableArray(); 
    $.getJSON("/api/mydata/1", self.rateCards); 
} 

function RateCardsViewModel(projectId) { //This version does not bind 
    var self = this; 
    self.rateCards = ko.observableArray(); 

    $.getJSON("/api/mydata/1", function (data) { 
     self.rateCards = data; 
    }); 

} 사이의 차이를 말할 수있는 방법

그것은 두 번째 버전이 바인드 한 후 그 데이터를 가져 오는 것처럼 보이지만, I 두 버전의 getJSON이 비동기라고 생각했습니다. 어떤 도움을 주시면 감사하겠습니다. 내가 비동기 적으로 데이터를 받고 매핑 플러그인

답변

0

에게 두 버전을 사용하기를 원하기 때문에

나는이 두 번째 방법을 할 필요가있다. 차이점은 첫 번째 버전은 즉시 검색된 데이터를 관찰 가능 객체에 전달하는 반면 다른 하나는 관측 가능 객체를 대체하는 사용자 정의 함수를 제공한다는 점입니다.

관측 가능성이 실제로 함수라는 것을 잊지 마십시오. 관측 값을 설정할 때 self.rateCards(newValue)이 아닌 self.rateCards = newValue을 사용해야합니다. 후자의 경우 실제로 관찰 가능을 대체하고 값을 업데이트하지는 않습니다. 즉, 관찰 가능 항목에 대한 구독이 변경 사항을 알지 못하고 현재 사용되지 않는 관찰 가능 객체에 계속 가입하게된다는 것을 의미합니다. 의미가

function RateCardsViewModel(projectId) { 
    var self = this; 
    self.rateCards = ko.observableArray(); 

    $.getJSON("/api/mydata/1", function (data) { 
     self.rateCards(data); 
    }); 
} 
+0

감사 로버트 :

상단 버전을 대체하려면, 당신은 때문에 그런 짓을해야합니다. – silverstirling