2013-03-25 79 views
6

路由問題,下面是我使用的框架:與笨和Backbone.js的

  • 笨REST API
  • Require.js
  • Backbone.js的

運行應用:

  • htaccess文件通過Codeigniter index.php文件重定向所有內容。
  • Codeigniter中有一個默認路由設置可以調用「開始」控制器。
  • 開始控制器調用開始視圖(Codeigniter中唯一的視圖)。
  • 開始視圖包含整個網站的模板,並打電話開始Require.js
  • Require.js啓動Backbone和應用程序按預期工作。

問題:路由到其他骨幹網訪問量:

  • 現在我想通過骨幹網與其他骨幹「意見」的路線。
  • 問題是當我嘗試在HREF htaccess文件觸發時提供像「localhost/otherPage」這樣的鏈接,並且Codeigniter試圖找到該控制器,並且我得到由Codeigniter生成的404。
  • 我試過在Backbone中使用`app.navigate(「otherPage」,{trigger:true});`強制路由而不是HREF,`但我得到了Codeigniter生成的相同的404錯誤。

我應該採取什麼方向:

  • 我想繼續使用笨它的RESTful API,因此模型和一些特殊的驗證功能。
  • 我也想在前端使用Backbone和Require。
  • 我可以將htacess重定向更改爲啓動Require和Backbone的index.html文件。如果我使用這種方法,Codeigniter RESTFUL API控制器仍能正常啓動嗎?
  • 我是否在Codeigniter中爲每個頁面創建一個視圖並讓每個頁面都啓動Require + Backbone爲每個視圖創建一個新的視圖?
  • 我將很快考慮Node.js。我應該只是拋棄框架的Codeigniter方面,並在Node.js上全身心投入?

任何指導非常感謝。

回答

3

如果您還沒有這樣做,您可能需要通過主幹標籤更改(這是他的正常行爲,pushState:false)通過Backbone進行路由,因爲修改標籤絕不會導致服務器調用,因此忽略Codeigniter的路由器。
在你的例子中,你會想導航到localhost /#otherPage
然後使用Codeigniter的路由器爲您的ajax REST調用。

+0

所以我垃圾我的htaccess文件,並有一個start.index文件加載骨幹?當我在Codeigniter中調用RESTFUL API時,框架會通過控制器調用啓動(使用自動加載等)嗎?這是我有麻煩理解的主要問題。 – Lowkase 2013-03-28 16:56:25

+0

不可以,你仍然可以保留你的兩臺路由器,因爲它們不能同時工作:Backbone的路由器會處理hashtag的變化(客戶端,你沒有對服務器進行任何調用),CodeIgniter將處理url變化(服務器端,調用服務器 - 當然只有你的AJAX REST調用)。您的REST調用將不得不由CodeIgniter(從未使用它)RESTFUL API進行路由。 – Loamhoof 2013-03-28 18:21:43

+0

@Lowkase Loamhoof提出的解決方案非常好。要回答你的問題:對CodeIgniter的REST API調用將啓動框架的自動加載。 Codeigniter不會區分來自瀏覽器或Backbone.fetch()的GET請求。問題是:爲什麼你需要保持CodeIgniter路由器?轉儲Codeigniter MVC的View部分,並用Backbone的MV *完全替代它。除了第一次調用start.index.html引導您的RequireJs/Backbone之外,所有路由都由Backbone的路由器完成。 – 2013-04-01 18:07:56

1

另一種讓瀏覽器無法通過HREF鏈接提交http請求的方法是使用javascript和jquery覆蓋它。如果你不想像Loamhoof所建議的那樣總是使用hashtags,那麼這很有用。

例子:

$('#linkID').on('click', function(event) { 

    event.preventDefault(); 

    backboneRouter.navigate($(event.currentTarget).attr('href'), { trigger:true }); 

});