【问题标题】:Optimal code for Knockout Mapping InitializationKnockout 映射初始化的最佳代码
【发布时间】:2014-03-26 16:41:22
【问题描述】:

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

我到处寻找更好的例子,但没有任何运气。如何避免在两个不同的地方调用 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);
});

【问题讨论】:

    标签: javascript knockout.js knockout-mapping-plugin


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2014-01-09
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多