2014-12-08 120 views
1

我正在爲自學教學開發博客app with fiddle here。我面臨着問題並逐漸克服它們。無法通過骨幹視圖路由

我目前設法呈現我的初始視圖。伯我想另一種觀點來完全填充身體。從第一個視圖到第二個視圖,然後到其他視圖,我嘗試使用anchored preventDefault,並在當前視圖中觸發命中方法來觸發Backbone路由器路由。從那裏到路由器方法,最後構建我的第二個視圖。

到現在爲止,我得到JS控制檯上的錯誤:

[Error] TypeError: undefined is not a function (evaluating 'Backbone.navigate(this.hrefOfPostForm , {trigger: true})') 
toPostFormRoute (app.js, line 45) 
(anonymous function) ([native code], line 0) 
dispatch (jquery.min.js, line 3) 
handle (jquery.min.js, line 3) 

什麼可問題是我的導航代碼?

+0

直接從你的代碼庫複製粘貼到jsFiddle不起作用。例如,jsFiddle站點上不存在「backbone-min.js」依賴項。您必須自己從CDN加載它。此外,缺少標籤。這是一個清理版本: http://jsfiddle.net/6nwbvsut/2/ – AlexZ 2014-12-08 01:43:57

+0

這就是我通過添加外部資源所做的。你沒有看到他們。小提琴不喜歡頭標籤,這是不必要的。謝謝。 – 2014-12-08 14:14:07

回答

2

首先,不存在。 Backbone.history.navigate確實。但你還有另一個問題。

檢查出Backbone.Router.navigate API:第一個參數是您要重新路由到的路線,而不是您希望它命中的功能。這是你正在嘗試做的:

var sampleA = function(){}; 

Backbone.history.navigate(sampleRouteA, {trigger: true}); 

這是行不通的。您需要定義路由器處理程序,然後導航到Backbone將處理的指定路線。以下將(可能)工作:

var sampleA = function(){}; 

var someRoutes = Backbone.Router.extend({ 
    routes: { 
    'sampleRoute/A': 'doSampleA', 
    'sampleRoute/B': 'doSampleB' 
    }, 

    'doSampleA': function(){ 
    sampleA(); 
    }, 

    'doSampleB': function(){ 
    }, 
}); 

Backbone.history.navigate('sampleRoute/A', {trigger: true}); 

Here is the corresponding jsFiddle。打開你的devtools(Chrome上的F12),並在輸入id時查看日誌,然後單擊按鈕。 iframe的網址將隨着您提供的ID一起更改爲匹配路線。這是骨幹路由應該如何工作的。

+0

感謝您的評論和回答。你是對的我使用Backbone.navigate。但我不會做你認爲我正在做的其他事情。我使用路由來導航第一個參數並在路由器中定義路由方法。並在路線對象中匹配具有methid名稱的路線。我會嘗試你的想法,將使用Backbone.history.navigate()。 – 2014-12-08 14:22:13

+0

它的路線,謝謝。現在我已將其更正爲具有Backbone.history.navigate()而不是Backbone.navigate()。我不採取未定義的錯誤,因爲你所說的Backbone.history存在但不是Backbone。網址預期會發生變化。但是現在我仍然無法使用body元素中的表單模板來渲染新視圖。 – 2014-12-09 20:57:29