2017-03-07 10 views
1

私はDevExtremeとノックアウトを使用しています。 JSON-Dataをサーバーから取得し、それをobservableに保存します。非同期関数でobservableの値を設定する

現在のアプローチ:

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私はservicestackを使用しています – 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); 
     } 
    }); 
} 
関連する問題