2017-03-07 31 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); 
     } 
    }); 
}