2011-05-09 11 views
7

मैं एक asp.net mvc पेज पर knockoutjs का उपयोग कर रहा हूँ। मैं ko.toJSON(viewModel) पर कॉल करके सर्वर पर वापस एक फॉर्म को जारी रखने के लिए AJAX का उपयोग कर रहा हूं और उसके बाद परिणाम jQuery को jQuery का उपयोग कर सर्वर पर पोस्ट कर रहा हूं। दृश्य मॉडल पर मौजूद सभी गुणों को जावास्क्रिप्ट दिनांक को छोड़कर सफलतापूर्वक क्रमबद्ध किया जाता है जो खाली वस्तु के रूप में जारी रहता है।क्या ko.toJSON() तिथियों के साथ काम करता है?

घोषणा:

var viewModel = { 
    startTime: ko.observable(), 
    type: ko.observable(), 
    durationInMinutes: ko.observable(), 
    notes: ko.observable() 
}; 

डेटा सहेजें:

var postData = ko.toJSON(viewModel); 
$.ajax({ 
    url: "/data", 
    type: "POST", 
    data: postData, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function() { 
     console.log('success!'); 
    }, 
    error: function() { 
     console.log('fail!'); 
    } 
}); 

viewModel.startTime() की console.log मूल्य है:

Date {Tue May 10 2011 11:30:00 GMT-0500 (Central Daylight Time)}

डेटा सहेजें की लाइन 1 के बाद, POSTDATA का मान:

{ 
    "startTime": {}, 
    "type": "1", 
    "durationInMinutes": "45", 
    "notes": "asfasdfasdfasdfasdfasdfasdfas", 
    "displayableStartTime": "10-May 11:30" 
} 

अगर मैं विस्तार डेटा सहेजें की लाइन 1

var jsonEvent = ko.toJS(viewModel); 
jsonEvent.startTime = viewModel.startTime(); 
var postData = JSON.stringify(jsonEvent); 

को POSTDATA का मूल्य है :

{ 
    "startTime": "2011-05-10T16:30:00.000Z", 
    "type": "1", 
    "durationInMinutes": "45", 
    "notes": "asfasdfasdfasdfasdfasdfasdfas", 
    "displayableStartTime": "10-May 11:30" 
} 

क्या कोई यह बता सकता है कि क्या हो रहा है और मैं डेट ऑब्जेक्ट को संभालने के लिए कैसे नॉकआउट प्राप्त कर सकता हूं?

+1

एक समस्या है जो यहां इस एक के लिए लॉग होता है: https://github.com

हालांकि आपकी समस्या के लिए शायद नहीं एक फिक्स, यह सुधार मेरी ko.toJSON() तारीख समस्या के लिए काम किया/SteveSanderson/नॉकआउट/मुद्दों/55। क्या आप अपने अंतिम उदाहरण में प्रारूप के साथ ठीक हैं? –

+0

उत्कृष्ट। धन्यवाद! Wrt प्रारूप, क्या आपका मतलब पूर्ण SaveData या SaveData की पंक्ति 1 विस्तार है? मैं jquery, AJAX, और knockoutjs के लिए नया हूँ, इसलिए कृपया किसी भी सलाह को पारित करने के लिए स्वतंत्र महसूस करें। रेखा 1 विस्तार मूल रूप से अज्ञानता से बाहर एक कार्यान्वयन है (ढांचे को अपनी बात करते हैं और फिर खराब मूल्य को ठीक करते हैं)। – Jason

+0

हां, यदि वह मूल्य है जो आप चाहते हैं, तो नीचे दिया गया जवाब यह करने का एक और तरीका होगा। सौभाग्य! –

उत्तर

3

ko.toJS और तिथियों के साथ वर्तमान समस्या को देखते हुए, एक विकल्प एक निर्भर ऑब्जेरबल बनाने के लिए होगा जो वास्तविक मूल्य है जिसमें आप सर्वर से निपटना चाहते हैं।

कुछ की तरह:

var viewModel = { 
    startTimeForInput: ko.observable(), 
    type: ko.observable(), 
    durationInMinutes: ko.observable(), 
    notes: ko.observable() 
}; 

viewModel.startTime = ko.dependentObservable(function() { 
    return this.startTimeForInput().toJSON(); 
}, viewModel); 

ko.applyBindings(viewModel); 

अब, जब आप फोन ko.toJSON आप startTime सही मान है कि सर्वर इस्तेमाल कर सकते हैं के साथ मिल जाएगा।

पुराने ब्राउज़र के लिए, json2.js जैसे कुछ दिनांक वस्तुओं के लिए .toJSON शामिल होंगे।

+0

धन्यवाद। यह एक बेहतर कामकाज है। यह बहुत बुरा है हालांकि हमें इसके आसपास काम करना है। – Jason

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