2014-03-26 3 views
1

녹아웃 매핑 플러그인을 사용하여 서버의 JSON에서 직접 내 viewmodel을 생성하는 것은 이번이 처음입니다. 초기 데이터 세트는 서버에서 가져온 다음 10 초 동안 변경 사항을 폴링합니다. 이 코드는 작동하지만 매우 건조하지는 않은 것 같습니다.녹아웃 매핑 초기화를위한 최적의 코드

나는 더 좋은 예를 찾아 보았지만 행운이 없었습니다. 두 개의 다른 장소에서 getJSON을 호출하지 않으려면 어떻게해야합니까? 내 고객 scripts.js 파일에서

:

function CustomerRefresher(id) { 
    var viewModel; 

    $.getJSON('/ApiCustomer/Get/' + id, function (data) { 
     viewModel = ko.mapping.fromJS(data); 
     ko.applyBindings(viewModel); 
     setTimeout(refresh, 10000); 
    }); 

    var refresh = function() { 
     $.getJSON('/ApiCustomer/Get/' + id, function (data) { 
      ko.mapping.fromJS(data, {}, viewModel); 
     }); 

     setTimeout(refresh, 10000); 
    } 
} 

내 .cshtml 파일에서 : 그런

$(function() { 
    CustomerRefresher(@Model.Id); 
}); 

답변

1
function CustomerRefresher(id){ 
    var refresh = function(){ 
    $.getJSON('/ApiCustomer/Get/' + encodeURIComponent(id), function(data){ 
     if (typeof CustomerRefresher.viewModel !== 'undefined'){ 
     ko.mapping.fromJS(data, {}, CustomerRefresher.viewModel); 
     }else{ 
     CustomerRefresher.viewModel = ko.mapping.fromJS(data); 
     ko.applyBindings(CustomerRefresher.viewModel); 
     } 
     setTimeout(refresh, 10000); 
    }); 
    }; 
    refresh(); 
} 

뭔가? (뷰 모델을 "캐시"하기 위해 함수 자체를 사용할 수 있음) 또한 example이 제공됩니다.

또한 FWIW는 codereview.SE에 더 적합 할 것입니다.