2013-02-26 11 views
10

現在のシナリオ:JSON.stringifyノックアウトJS変数を持つオブジェクト

function Employee(data) { 
var self = this; 

// variables 
this.Forename = ko.observable(data.Forename); 
this.Surname = ko.observable(data.Surname); 

this.Save = function() { 
    var obj = JSON.stringify(self); // Without ko.observables, this works fine. self() doesn't work obviously. 
    console.log(obj); 
}; 
} 

私は、それらのひとつひとつの1を経由せずに、すべての観測可能な値を取得し、私がやろうとしていることはかなりまっすぐ進むと思いstringify関数を使用してJSON文字列を作成します。これは観察可能なものがなければ簡単ですが、簡単な方法はありますか?

答えて

33

ノックアウトは、まさにこれを行うにはtoJSON機能が組み込まれています:

var json = ko.toJSON(viewModel); 

ko.toJSON - これはあなたのビューモデルのデータを表すJSON文字列を生成します。内部的には、ビューモデルで単にko.toJSを呼び出し、ブラウザのネイティブJSONシリアライザを結果に使用します。 注:ネイティブJSONシリアライザ(IE 7以前など)を持たない古いブラウザでも動作するには、json2.jsライブラリも参照する必要があります。

+0

実際、これは別のライブラリを必要としないので、さらに優れています。驚くばかり。 –

+0

まずobservableを通常のJSオブジェクトに変換してからko.toJSONを呼び出してください。 –

+0

@ebramtharwat Nope - 編集 –

3

knockout mapping pluginを見ましたか?

var unmapped = ko.mapping.toJS(viewModel); 
+0

一つ

 var json = ko.toJSON(ko.mapping.toJS(viewModel)) 

セカンドそれ?"瞬間!乾杯:) –

4

あなたは2つの方法でこれを行うことができます:最初の

:それらの「ああドール、なぜ私は考えていなかったの

 var json = JSON.stringify(ko.mapping.toJS(viewModel)) 
+0

そして次にko.toJSON(ko.mapping.toJS($ root)、null、2):) –

関連する問題