2013-02-26 17 views
10

वर्तमान परिदृश्य:JSON.stringify नॉकआउट जे एस चर के साथ एक वस्तु

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

मुझे लगता है कि मैं क्या करने की कोशिश कर रहा हूँ बहुत सीधे आगे है, उनमें से हर एक के माध्यम से जा के बिना सभी नमूदार मूल्यों को प्राप्त, और स्ट्रिंगफाई फ़ंक्शन का उपयोग करके JSON स्ट्रिंग बनाना। अवलोकन के बिना करना आसान है, क्या उनके साथ ऐसा करने का एक आसान तरीका है?

उत्तर

33

नॉकआउट एक toJSON समारोह में बनाया गया है वास्तव में यह करने के लिए:

var json = ko.toJSON(viewModel); 

ko.toJSON - इस JSON स्ट्रिंग आपके विचार मॉडल का डेटा का प्रतिनिधित्व पैदा करता है। आंतरिक रूप से, यह आपके दृश्य मॉडल पर ko.toJS को कॉल करता है, और फिर परिणामस्वरूप ब्राउज़र के मूल JSON serializer का उपयोग करता है। नोट: इसके लिए पुराने ब्राउज़र पर काम करने के लिए जिनके पास कोई मूल JSON serializer नहीं है (उदा।, आईई 7 या इससे पहले), आपको json2.js लाइब्रेरी का भी संदर्भ देना होगा।

+0

असल में, यह भी बेहतर है क्योंकि इसे किसी अन्य लाइब्रेरी की आवश्यकता नहीं है। बहुत बढ़िया। –

+0

मुझे लगता है कि आपके पास पहले सामान्य जेएस ऑब्जेक्ट में अवलोकन करने योग्य है, फिर उस पर ko.toJSON को कॉल करें। –

+0

@ एब्रमथारवाट नोप - –

3

क्या आपने knockout mapping plugin पर देखा है?

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

उन "डी 'ओह, मैं क्यों नहीं सोचा था में से एक उस?" क्षणों! चीयर्स :) –

4

आप 2 तरीके से कर सकते हैं:

पहले:

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

दूसरा

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

और फिर ko.toJSON (ko.mapping.toJS ($ रूट), शून्य, 2) :) –

संबंधित मुद्दे