2013-01-02 10 views
6

क्या प्रोटोटाइप ऑब्जेक्ट पर गणना गुणों को बनाने की अनुशंसा की जाती है?KnockoutJS गणना गुणों के लिए प्रोटोटाइप का उपयोग

यह मैंने नीचे प्रयास किया है लेकिन firstName बाइंडिंग फ़ंक्शन को निष्पादित करने के बजाय स्ट्रिंग के रूप में वापस कर रहा है (http://jsfiddle.net/W37Yh)।

var HomeViewModel = function(config, $, undefined) { 

    if (!this instanceof HomeViewModel) { 
     return new HomeViewModel(config, $, undefined); 
    } 

    this.firstName = ko.observable(config.firstName); 
    this.lastName = ko.observable(config.lastName); 
}; 

HomeViewModel.prototype.fullName = function() { 
    return ko.computed(function() { 
     return this.firstName() + " " + this.lastName(); 
    }, this); 
}; 

var model = new HomeViewModel({ 
    firstName: "John", 
    lastName: "Smith" 
}, jQuery); 

ko.applyBindings(model);​ 
+0

नहीं, प्रोटोटाइप आधारित ऑब्जेक्ट निर्माण और नॉकआउट आम तौर पर एक साथ नहीं जाते हैं। – Niko

+0

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

उत्तर

15

this वास्तविक viewmodel के बाद से उदाहरण अभी तक नहीं बनाया गया है नहीं है। आप

ViewModel = function() { 
    this.fullName = ko.computed(this.getFullName, this); 
}; 

ViewModel.prototype = { 
    getFullName: function() { 
     return this.firstName() + " " + this.lastName(); 
    } 
}; 
+3

धन्यवाद। यह भी [इस वीडियो] में रयान निमेयर द्वारा सुझाया गया था (http://vimeo.com/51103092) –

+0

धन्यवाद। यह दृष्टिकोण सब्सक्राइब के लिए भी काम करता है। मैंने पाया है कि ViewModel.prototype.getFullName = function() {} मान्य है और साथ ही आपका दृष्टिकोण भी है। – Aligned

+0

हां, मेरा प्रोटोटाइप घोषणा एक ऑब्जेक्ट शाब्दिक के तहत आपके सभी प्रोटोटाइप कार्यों को समूहीकृत करने का एक साफ तरीका है – Anders

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