淘汰赛映射初始化的最佳代码

Optimal code for Knockout Mapping Initialization

本文关键字:最佳 代码 初始化 映射 淘汰赛      更新时间:2023-09-26

这是我第一次使用Knockout Mapping插件直接从服务器的JSON创建我的视图模型。初始数据集来自服务器,然后每10秒轮询一次更改。这段代码可以工作,但我觉得它不是很DRY。

我到处寻找更好的例子,但没有任何运气。如何避免在两个不同的地方调用getJSON ?

在我的customer-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);
});
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();
}

之类的?(可以使用函数本身来"缓存"视图模型)另外,提供了示例。

而且,顺带一提,这可能更适合codereview.SE.