2011-11-14 19 views
6

バックボーン(バックボーンアプリの根底にある非常に静的なテキストコンテンツバージョン)を介してプログレッシブエンハンスメントのためにハイジャックしたいアプリケーションが開始されたとき、ドーム上にいくつかのナビゲーションリンクがあります。バックボーンルータはイベントを起動しません

HTMLは次のようになります。

... 
<body> 
<header> 
<nav> 
<ol> 
<li> 
<a href="/en/home">home</a> 
</li> 
<li> 
... few more links 
</header> 
その後

私のアプリを使用してインスタンス化されます。

ワークスペースは、単にルータとアプリからそれらのルートが正しく経由してルータに加工されている

var App = (function(fw){ 
var $  = fw; 
var workspace   = {}; 
var self  = {}; 
var lang  = "en"; 
var models  = {...}; 
var views  = {...}; 
var collections = {...}; 
self.init = function() { 
    workspace = new Workspace(
    { 
    routes: { 
    "/": "home", 
    "/home": "home", 
    "/terms": "terms", 
    "/news": "blog" 
    }, 
    lang : lang 
    }) 
} 
return self; 
}); 
var app; 
// launch 
$(document).ready(function() { 
app = new App(jQuery); 
app.init(); 
}); 
initialize関数、リンクも正常に動作し、URLは期待通りに変更され、古いブラウザでハッシュされます。問題は、ルーター/ワークスペース自体でコールバックが行われていないことです。これは単にミュートだとクリックが

ここに私のワークスペース/ルーターの行われたときのdoesntは、機能を発射:

var Workspace = Backbone.Router.extend({ 

routes : {}, 
//functions      <------------THESE 
home: function(e){ 
    e.preventDefault(); 
    console.log("home here"); 
    App.views.HomeView.render(); 
}, 
terms: function(){   //<-----------NEVER 
    console.log("terms here"); 
    App.views.TermsView.render(); 
}, 
blog: function(){   //<-----------FIRE 
    console.log("blog here"); 
}, 
initialize: function(params){ 
    var t = this; 
    var tmpr = {}; 
    for(var i in params.routes) 
    { 
    //this just fuses lang and each route so /home becomes /en/home 
        tmpr["/"+params.lang+i] = params.routes[i]; 
    } 
    this.routes = tmpr; // this is fine and when logged it shows nicely with all routes looking good 
    // router will only ever initialize once so lets deal with the stuff currently on the DOM before the app is inited. 
    $("a",$("header")).click(function(e){ 
    e.preventDefault(); 
    Backbone.history.navigate($(this).attr("href"),true);//<-- true is set? should fire methods? 
    // I've also tried all kinds of variations like t.navigate(..) where t is this workspace 
    }); 
//this also seems to be fine and either does hashes or states 
    if(history && history.pushState) { 
    Backbone.history.start({ 
    pushState : true 
    }); 
    console.log("has pushstate"); 
    } else { 
    Backbone.history.start(); 
    console.log("no pushstate"); 
    } 
    console.log("Router inited with routes:",this.routes);//logs routes nicely 
} 
}); 

答えて

2

initialize機能が実行されたときにルートがすでにバインドされている(the backbone sourceを参照します)。

this.routes = tmpr; 
this._bindRoutes(); 

あなたは_bindRoutes機能との結合のルートをトリガすることができます

関連する問題