2012-01-31 16 views
5

मैं एक backbone.js-application पर काम कर रहा हूं और उस बिंदु तक पहुंच गया हूं जहां मेरे पास मेरे आवेदन के प्रत्येक भाग का प्रतिनिधित्व करने वाले कई रूटर और विचार हैं। नीचे सरलीकृत राउटर उदाहरण में, मेरे पास दो स्थान हैं; account & usersbackbone.js के साथ विचारों को साफ करना?

प्रत्येक स्थान में दोनों दृश्य अपनी सामग्री को पारस्परिक तत्व में प्रस्तुत करते हैं, जिसका नाम #appcontainer है। मेरी सामान्य समझ में कहा गया है कि मुझे बाइंडिंग, डीओएम और व्हाट्नॉट में टकराव को रोकने के लिए किसी अन्य को लॉन्च करने से पहले remove प्रत्येक दृश्य को सुनिश्चित करना चाहिए।

लेकिन जैसा कि मुझे यह सुनिश्चित करने के लिए पता नहीं है कि पहले से ही एक दृश्य बनाया गया है, मैं अपने राउटर या विचारों के अंदर से previousView.remove() को स्पष्ट रूप से कॉल नहीं कर सकता।

क्या किसी भी अंतिम पिछले बाइंडिंग और डीओएम के तत्वों को साफ़ करने के लिए प्रत्येक दृश्य के निर्माता को $(this.el).empty() जोड़ने के लिए पर्याप्त होगा?

यहां राउटर उदाहरण है?

var myRouter = Backbone.Router.extend({ 

    routes: { 
     "account": "account", 
     "users": "users" 
    }, 

    account: function() { 
     view = new AccountView({}); 
     view.render(); 
    }, 

    users: function() { 
     view = new UserView({}); 
     view.render(); 
    } 

}); 

उत्तर

11

मैं एक बहुत आसान कार्यान्वयन है, मैं अभी-अभी अपने आवेदन शुरू कर और नहीं जानता कि यह कैसे लंबे समय में धारण करने जा रहा है, लेकिन यह इस तरह दिखता है:

संपादित करें: यहां संपूर्ण फ़ाइल दिखाई देगी। this.render myRouter का एक और काम होगा।

var myRouter = Backbone.Router.extend({ 
    routes: { 
     'path/to/account' : 'account', 
     'path/to/users': 'users' 
    } 

    account: function() { 
     view = new AccountView({}); 
     this.render(view); 
    }, 

    users: function() { 
     view = new UserView({}); 
     this.render(view); 
    }, 

    render: function (view) { 
     //Close the current view 
     if (this.currentView) { 
      this.currentView.remove(); 
     } 

     //render the new view 
     view.render(); 

     //Set the current view 
     this.currentView = view; 

     return this; 
    } 
}); 
+0

हाय! आपके उत्तर के लिए धन्यवाद। क्या jQuery के '.remove()' -method को बैकबोन '.remove() 'दृश्यों से अलग करता है? – Industrial

+2

बैकबोन का .remove() jquery's .remove() के लिए सिर्फ एक उपनाम है, इसलिए इन उद्देश्यों के लिए वे बराबर हैं। – MrGrigg

+1

@MrGrigg ** क्या आप स्पष्टीकरण विधि कहां स्पष्टीकरण दे सकते हैं? ऐसा लगता है कि यह राउटर में ही जाता है, लेकिन मैं यह सुनिश्चित करना चाहता हूं ... ** _ मुझे वास्तव में इस कोड को देखना पसंद है और पहली नज़र में, ऐसा लगता है कि यह एप्लिकेशन_ को बनाने का एक अच्छा तरीका होगा। – Emerson

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