2013-02-04 17 views
6

मैं वर्तमान में बैकबोन को हमारी जावास्क्रिप्ट फ़ाइलों को व्यवस्थित करने और हमारे कोड के लिए एक स्वच्छ संरचना बनाने के तरीके के रूप में देख रहा हूं।Backbone.js उपयोगिता

मेरा प्रश्न मुख्य रूप से "सर्वश्रेष्ठ अभ्यास" प्रश्न है।

पुस्तकालय बहुत अच्छा काम करता है और मैंने सफलतापूर्वक एएमडी और requjs के साथ अपनी संरचना स्थापित की है। मेरा प्रश्न कुछ उपयोगिता फाइलों से संबंधित है जो मैं चला रहा हूं। किसी को एक XML दस्तावेज़ से डेटा प्राप्त होता है और इसे एक जेसन डेटा ऑब्जेक्ट में परिवर्तित करता है (इसलिए डेटा को स्थानीयकृत किया जा सकता है)। दूसरा एक उपयोगिता है जो फेसबुक को लोड और कनेक्ट करता है। मैंने इन दोनों को 'मॉडल' के रूप में बनाया है।

तर्कसंगत रूप से इन मॉडलों को "नियंत्रक" होना चाहिए क्योंकि वे सेवाओं से जुड़ते हैं लेकिन इन्हें राउटर (या नियंत्रक) फ़ाइल में हैशबैंग पर ब्राउज़ करने की आवश्यकता के बिना बुलाया जाना चाहिए।

क्या मुझे इन दो उपयोगिता फ़ाइलों के लिए रीढ़ की हड्डी मॉडल का विस्तार करना चाहिए या क्या मुझे कुछ और उपयोगिता फाइलों को लागू करने के लिए क्या करना चाहिए?

+0

शानदार प्रश्न भी है! यही वह है जिसकी तलाश में मैं हूं। मूर्खतापूर्ण है कि यह बंद है। – Kieveli

उत्तर

6

इस उद्देश्य के लिए व्यावहारिक रूप सेBackbone.Model एस का उपयोग करने में कुछ भी नहीं है, लेकिन परवाह किए बिना यह मछली पकड़ने लगता है। मॉडल अतिरिक्त सामान के साथ आता है जो "सेवा" या "उपयोगिता" प्रकार वर्ग में नहीं है।

इसके बजाय मैंने कार्यक्षमता के लिए एक अधिक सामान्य, घटनाबद्ध बेस क्लास परिभाषित किया है जो बैकबोन मॉडल-व्यू-कलेक्शन-राउटर प्रतिमान में काफी फिट नहीं है। में है कि यह extend एड हो सकता है

define(['backbone', 'underscore'], function(Backbone, _) { 

    var Class = function() { 
    this.initialize.apply(this, arguments); 
    }; 

    //give Class events and a default constructor 
    _.extend(Class.prototype, Backbone.Events, {initialize: function() {}}); 

    //copy the extend feature from one of the backbone classes 
    Class.extend = Backbone.Model.extend; 

    return Class; 
}); 

वर्ग, अन्य रीढ़ वस्तुओं की तरह व्यवहार करती है, इसके उदाहरण हैं एक initialize निर्माता विधि है और वे घटनाओं समर्थन करते हैं। आपके उदाहरणों में से एक, स्थानीयकरण सेवा, की तरह कुछ दे सकता है:

var LocalizationService = Class.extend({ 
    initialize: function(url) { 
    this.url = url; 
    this.fetch(); 
    }, 

    fetch: function({ 
    var self = this; 
    $.ajax({ 
     url:this.url, 
     success: function(response) { 
     self.response = response; 
     self.trigger('fetch:complete', self, response); 
     //etc... 
     } 
    }); 
    } 
}); 
+0

यह वही था जो मैं खोज रहा था। बहुत धन्यवाद! :-) –