2011-06-27 16 views
8

Backbone.Controller'da geçersiz (veya tanımsız) rotayı ve 404 sayfasını algılamak için herhangi bir yöntem var mı?Backbone.Controller'de geçersiz yol ve tetikleme işlevi nasıl belirlenir

Denetleyicimdeki yolları bu şekilde tanımladım, ancak çalışmadı.

class MyController extends Backbone.Controller 
    routes: 
     "method_a": "methodA" 
     "method_b": "methodB" 
     "*undefined": "show404Error" 

    # when access to /#method_a 
    methodA: -> 
     console.log "this page exists" 

    # when access to /#method_b 
    methodB: -> 
     console.log "this also exists" 

    # when access to /#some_invalid_hash_fragment_for_malicious_attack 
    show404Error: -> 
     console.log "sorry, this page does not exist" 

GÜNCELLEME:

Ben şimdiki karma parçasının ve @routes maç için Backbone.Controller yapıcısı kullanılır.

class MyController extends Backbone.Controller 
    constructor: -> 
     super() 
     hash = window.location.hash.replace '#', '' 
     if hash 
      for k, v of @routes 
       if k is hash 
        return 
       @show404Error() 

    routes: 
     "method_a": "methodA" 
     "method_b": "methodB" 
     "*undefined": "show404Error" 

    # when access to /#method_a 
    methodA: -> 
     console.log "this page exists" 

    # when access to /#method_b 
    methodB: -> 
     console.log "this also exists" 

    # when access to /#some_invalid_hash_fragment_for_malicious_attack 
    show404Error: -> 
     console.log "sorry, this page does not exist" 
+0

Kendi sorununuzu çözdüyseniz, kendi sorunuzu yanıtlayın. – Raynos

+2

Öneri, yalnızca soruyu içerecek ve daha sonra kendi cevabınızı sağlayacak şekilde sorunuzu yeniden yazmanızdır. Yani, sorunun cevabını atlayın. Yanıtı hemen vermezseniz, birisinin sorunuzu yanıtlamak için daha iyi bir yolu olduğunu görebilirsiniz. –

+0

Evet, öneriniz doğru. Bunu paylaştığın için teşekkürler! – tomodian

cevap

10

Yukarıdaki işler, ancak yapıcıda yaptıklarınızı neden yapmanız gerektiğinden emin değilim. Biraz kırılgan olabilir, ama sonuncuya dahil ettiğimiz ayrı bir kontrolör oluşturuyoruz. uyarısı rota maç için sonuncusu olacak şekilde onun son:

NotFound = Backbone.Controller.extend({ 

    routes: { 
    "*path" : "notFound" 
    }, 

    notFound: function(path) { 
    var msg = "Unable to find path: " + path; 
    alert(msg); 
    } 

}); 

new NotFound(); 

yukarıda daha sağlam bir sürümünü kullanarak bana daha temiz bir yaklaşım gibi görünüyor.

+0

Ben Backbone newbie değilim ve Controller yöntemini çalıştırmadan önce tetikleyen Rails before_filter benzeri yaklaşım kullanmak istemiyorum. Fakat çözümünüz de sağlam ve temiz görünüyor. Teşekkür ederim! – tomodian

İlgili konular