2012-02-13 19 views
10

में राउटर को अनबिंड करें इसलिए मुझे backbone.js में राउटर को निकालने से रोकने के लिए राउटर को निकालना होगा। मैंने बिना किसी किस्मत के myRouter.off() और myRouter.remove() की कोशिश की है।backbone.js

इसके बजाय मैं क्या कर सकता हूं?

उत्तर

14

ऐसा करने के लिए कोई आधिकारिक रूप से समर्थित तरीका नहीं है (जिसे मैं जानता हूं)। आप निष्क्रिय करने के लिए किसी भी रूटर चाहते हैं, आप Backbone.history.stop(); है, जो गैर-दस्तावेजी है, लेकिन इस टिप्पणी के साथ स्रोत कोड में दिखाई देता है का उपयोग कर सकते हैं:

// Disable Backbone.history, perhaps temporarily. Not useful in a real app, 
// but possibly useful for unit testing Routers. 

अन्यथा, आप है चाहता हूँ में कुछ पासथ्रू हालत कोड करने के लिए अपने राउटर के मार्ग हैंडलर अगर राउटर की स्थिति "अक्षम" या ऐसा कुछ है। या अनियंत्रित बैकबोन.history.handlers (.route युक्त आंतरिक सरणी - regexp - और .callback के रूप में) पर पुनरावृत्त करें और इस विशिष्ट राउटर से संबंधित मार्गों को हटा दें।

जाहिर है, अनियंत्रित और सभी होने के कारण, यह बैकबोन की भावी रिलीज में बदलाव के अधीन है।

+0

अजीब है, मैं के अनुप्रयोग उपयोगी है लॉग आउट होने के बाद इसे अक्षम करने लगता होगा, वहाँ अन्य तरीकों से मैं संभाल करने के लिए कर रहे हैं टी, लेकिन मुझे वास्तव में backbone.history.stop पसंद आएगा – pushplaybang

0

अगर आप अपने रूटर के इन्स्टेन्शियशन नियंत्रित करने में सक्षम हैं, तो आप क्या कर सकते हैं निम्नलिखित:

var myRouter = new MyRouter({ routes: function(){ 
    return; 
}}); 
0

आप हैक आधारित समाधान का उपयोग कर सकते हैं (यह गैर एपीआई तरीकों का उपयोग करता है और नए संस्करणों के साथ काम करना बंद कर सकता Backbone.js का)

var router = new(Backbone.Router.extend({ 
 

 
    routes: { 
 
    "authentication": "authentication", 
 
    "contacts": "contacts", 
 
    "*notFound": "notFound" 
 
    }, 
 

 
    /** 
 
    * @param {string} routeName 
 
    */ 
 
    disableRoute: function(routeName) { 
 
    var index, handler, handlers = Backbone.history.handlers; 
 
    delete this.routes[routeName]; 
 
    for (var i = 0, len = handlers.length; i < len; i++) { 
 

 
     handler = handlers[i]; 
 
     if (handler.route.toString() === router._routeToRegExp(routeName).toString()) { 
 
     handlers.splice(index, 1); 
 
     break; 
 
     } 
 
    } 
 
    }, 
 

 
    contacts: function() { 
 
    alert('route `contacts`'); 
 
    }, 
 
    authentication: function() { 
 
    alert('route `authentication`'); 
 
    }, 
 
    notFound: function() { 
 
    alert('route `notFound`'); 
 
    router.navigate('404'); 
 
    } 
 
})); 
 

 
Backbone.history.start({ 
 
    silent: true 
 
}); 
 

 
$(function() { 
 
    $('#remove').on('click', function() { 
 
    router.disableRoute('authentication'); 
 

 
    router.navigate('404'); 
 
    }); 
 

 
    $('#goto_auth').on('click', function() { 
 
    router.navigate('authentication', { 
 
     trigger: true 
 
    }); 
 
    }); 
 

 
    $('#goto_contacts').on('click', function() { 
 
    router.navigate('contacts', { 
 
     trigger: true 
 
    }); 
 
    }); 
 
});
button { 
 
    display: block; 
 
    margin: 10px; 
 
}
<html> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script> 
 

 
</head> 
 

 
<body> 
 
    <button id="goto_auth">goto authentication route</button> 
 
    <button id="goto_contacts">goto contacts route</button> 
 
    <hr> 
 
    <button id="remove">remove authentication route</button> 
 
</body> 
 

 
</html>