2014-03-26 36 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