2014-03-26 42 views
1

這是我第一次使用Knockout Mapping插件來直接從服務器的JSON創建我的viewmodel。最初的一組數據來自服務器,然後我輪詢10秒的變化。此代碼有效,但我覺得它不是非常乾燥。Knockout Mapping初始化的最佳代碼

我已經看遍了所有的更好的例子,但沒有任何運氣。我怎樣才能避免在兩個不同的地方調用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