2013-02-26 29 views
10

Güncel senaryo:JSON.stringify Nakavt JS değişkenlere sahip bir nesne

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); 
}; 
} 

Ben ne yapmaya çalışıyorum oldukça yalındır olduğunu düşünüyorum, bunların her birinin geçmeden bütün gözlemlenebilir değerlerini almak, ve stringify işlevini kullanarak bir JSON dizesi oluşturmak. Bu gözlenebilir olmadan yapmak kolaydır, onlarla yapmak için basit bir yolu var mı?

cevap

33

Nakavt bir tam bunu yapmak için toJSON işlevinde inşa etti:

var json = ko.toJSON(viewModel); 

ko.toJSON - Bu görünüm modelin verilerini temsil eden bir JSON dizesi üretir. Dahili olarak, görünüm modelinizde ko.toJS'yi çağırır ve daha sonra sonuçta tarayıcının yerel JSON seri hale getiricisini kullanır. Not: Bunun için yerel JSON seri hale getirici (örn. IE 7 veya daha öncesi) olmayan eski tarayıcılarda çalışmak için json2.js kitaplığına da başvurmanız gerekir.

+0

Aslında, başka bir kütüphane gerektirmediğinden, bu daha da iyidir. Muhteşem. –

+0

Gözlemlenebilir normal JS nesnesine ilk önce dönüştürdüğünüzü daha sonra ko.toJSON'u çağıracağınızı düşünüyorum. –

+0

@ebramtharwat Hayır - Bkz. Düzenle –

3

knockout mapping plugin'a baktınız mı?

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

Bir

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

İkinci o?" anları! Şerefe :) –

4

2 yollardan yapabilirsiniz: İlk

: o "oh d', neden düşünmedim ait

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

Ve sonra ko.toJSON (ko.mapping.toJS ($ root), null, 2) :) –

İlgili konular