2012-09-28 24 views
5

मैं एक समृद्ध क्लाइंट एप्लिकेशन के लिए Knockout.js का उपयोग कर रहा हूं और इसमें बड़ी संख्या में knockout.js ViewModels शामिल होंगे। विकास में, मैंने knockout.js ViewModels बनाने के दो तरीकों को देखा। पहला तरीका।नॉकआउट.जेएस की घोषणा-मॉडल घोषित करना। दो विधियां

function AppViewModel() { 
this.firstName = ko.observable("Bert"); 
this.lastName = ko.observable("Bertington");} 

दूसरा तरीका।

var appViewModel = { 
this.firstName = ko.observable("Bert"), 
this.lastName = ko.observable("Bertington")}; 

क्या व्यूमोडल्स घोषित करने के इन दो तरीकों में कोई विशिष्ट अंतर है? knockout.js official page examples में उन्होंने पहले तरीके का उपयोग किया है। लेकिन तीसरे पक्ष के ढांचे में Knockout-validations.js जैसे दूसरे तरीके का उपयोग किया गया है। मुझे किस तरह का उपयोग करना चाहिए? इसका उपयोग करने में कोई विशिष्ट लाभ?

मुझे पता चला कि मैं पहली बार उपयोग करता हूं, तो मैं नॉकआउट-सत्यापन.जेएस फ्रेमवर्क का उपयोग नहीं कर सकता। मैं इस मामले पर वास्तव में उलझन में हूँ। किसी भी टिप्पणी की सराहना की है।

धन्यवाद।

+0

यहां एक और लिंक है जो मदद कर सकता है: http://stackoverflow.com/questions/9589419/difference-between-knockout-view-models-declared-as-object-literals-vs-functions –

उत्तर

3

पहला तरीका ऑब्जेक्ट कन्स्ट्रक्टर को परिभाषित करता है लेकिन एक नई वस्तु को तुरंत चालू नहीं करता है, तो आप इस तरह तर्कों को पारित कर सकते हैं। यदि आप कई ऑब्जेक्ट्स/मॉडल बना रहे हैं तो यह निश्चित रूप से दूसरे तरीके से कम गुंजाइश होगा।

दूसरा तरीका ऑब्जेक्ट प्रारंभकर्ता वाक्यविन्यास का उपयोग कर रहा है, यह आपके द्वारा सेट किए गए फ़ील्ड के साथ स्मृति में एक नई वस्तु को तुरंत चालू करता है। आम तौर पर यह छोटे कोड आकार के लिए पैदा करता है; यदि आप समान या समान संरचनाओं की दो वस्तुएं बना रहे हैं, तो पहले तरीके का उपयोग करें।

कोई कारण नहीं है कि आप दूसरे स्थान के पहले स्थान का उपयोग नहीं कर सकते हैं। बस एक नई वस्तु बनाएं और जहां भी इसकी आवश्यकता हो, इसे पास करें।

यह:

var appViewModel = { 
    this.firstName = ko.observable("Bert"), 
    this.lastName = ko.observable("Bertington") 
}; 

पहले एक बस अधिक AppViewModel रों लिए अनुमति देता है बनाया जाना है, उदा:

function AppViewModel(fName, lName) { 
    var self = this; 
    self.firstName = ko.observable(fName); 
    self.lastName = ko.observable(lName); 
} 
... 
var appViewModel = new AppViewModel("Bert", "Bertington"); 

इस रूप में एक ही वस्तु बनाता है new AppViewModel("Joe", "Shmoe")

2

आपके द्वारा वर्णित अंतर नॉकआउट या नॉकआउट के पुस्तकालयों के लिए विशिष्ट नहीं है, बल्कि यह जावास्क्रिप्ट समुदाय के बीच व्यापक रूप से बहस की भाषा-स्तर की समस्या है। डगलस Crockford, एक जावास्क्रिप्ट गुरु, दो बात के दोनों किनारों पर लेख है:

बिखरे हुए मंच पोस्ट, ब्लॉग लेख, और जावास्क्रिप्ट प्रोग्रामर के साथ बातचीत से, ऐसा लगता है कि समुदाय प्रोटोटाइप शैली को गले लगाने की ओर बढ़ रहा है। आपको अपनी पसंद की शैली का उपयोग करना चाहिए। प्रलेखन के आधार पर, ऐसा लगता है कि नॉकआउट-वैलिडेशन लाइब्रेरी को शास्त्रीय शैली के साथ दिमाग में डिजाइन किया गया था। इस मामले में शास्त्रीय शैली का लाभ यह होगा कि नॉकआउट-सत्यापन पुस्तकालय के साथ उपयोग करना आसान है। प्रोटोटाइप के नुकसान का नुकसान यह है कि इस पुस्तकालय के साथ उपयोग करना मुश्किल है।