2017-03-07 54 views
1

我正在使用DevExtreme和淘汰赛。我想从服务器获取JSON-Data并将其保存到可观察对象中。在异步函数中设置可观察值

现行办法:

var dataArray = ko.observableArray(); 
var dataId = ko.observable(""); 

MyApp.overview = function (params) { 
    "use strict"; 

    var viewModel = { 
     [...] 
    } 

    return viewModel; 
}; 

function getDataFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      var entries = $.map(data, function (item) { return new entry(item) }); 
      // first entry is ID 
      for (var i = 1; i < entries.length; i++) { 
       dataArray.push(entries[i]); 
      } 
     } 
    }); 
} 

function getIDFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      dataId(data.ID); 
     } 
    }); 
} 

function entry(data) { 
    this.A = data.A, 
    this.B = data.B, 
    this.C = data.C 
} 

我是新来的这些场景,所以我不知道如果我的apporach。为了测试,我打电话的功能,通过按钮手动获取JSON-数据,我也得到了需要的数据,但可观察都包含这样的:

function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]} 

我缺少什么?或者这种方法总体上是不好的做法?

+0

什么是您的服务器端技术? –

+0

@JasonSpake我正在使用服务堆栈 – Marcel

回答

1

我如何使用Knockout Mapping PluginfromJSON命令(根据数据格式的不同,您可能需要使用fromJS),它会将数据映射到源代码中。

function getDataFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      ko.mapping.fromJSON(data, {}, self.dataArray); 
     } 
    }); 
}