2012-06-28 63 views
0

在我的Backbone應用程序中,我有一個顯示帖子預覽的主視圖。當用戶點擊帖子時,該帖子將在疊加層中展開,並且網址將更改爲反映該帖子。當帖子被展開時,用戶可能會做一些事情觸發需要在根上下文中發生的服務器調用。問題在於,當帖子展開時,需要在根上下文中發生的服務器調用發生在帖子上下文中。這裏的操作順序:骨幹路由器,URL和測試/生產Web上下文

  1. 頁面加載主視圖網址:的http://本地主機:8080 /我-web應用程序/
  2. 用戶點擊後,疊加顯示,網址更新爲:http:// localhost:8080/my-web-app/posts/1
  3. 用戶單擊觸發對服務器的調用的內容。網址是:http:// localhost:8080/my-web-app/posts/1/load,這是錯誤的。

在上面的例子中,負載操作需要從根上下文的情況發生:的http://本地主機:8080/

我試圖改變我的網址,網頁應用程序/負載屬性爲我的模型,集合等包含領先的/,但是這會刪除「/ my-web-app /」上下文(URL變爲http:// localhost:8080/load)我的測試環境。當然,這在生產環境中可以很好地工作。

要解決這個問題,我已經設置了Backbone.history根選項是「/我-web應用程序/」,並已覆蓋每一個url屬性設置爲如下:

url: function() { 
    (Backbone.history.options.root != undefined ? Backbone.history.options.root : "") + "load"; 
} 

雖然這種方法工程,這是一個痛苦的屁股覆蓋每個網址的功能,這樣...更不用說,它感覺哈克。對於生產環境來說,這也是完全不必要的代碼。有沒有更好的方法來管理它,以便它可以在測試和生產環境中使用?

謝謝!

回答

1

在開發環境和生產環境中,應用程序路由不應該不同。這在某些時候總會帶來麻煩。

假設您在本地主機上使用Apache服務器,您可以製作您選擇的虛擬主機,並在/上提供/my-web-app/

首先,添加一個域名到你的/ etc/hosts文件,並將其指向127.0.0.1,這樣的:

127.0.0.1 mywebapphost 

,然後添加一個虛擬主機到Apache vhosts.conf

<VirtualHost *:80> 
    DocumentRoot "/Users/someone/Sites/my-web-app/" # absolute directory of your webapp 
    ServerName mywebapphost 
</VirtualHost> 

你完成了!您的web應用程序在// mywebapphost:8080上可用,並且所有路由與您的生產環境相同。

+0

我認爲這......它肯定會解決問題。我之所以沒有這樣做是因爲理論上我有可能使用同一臺服務器測試兩個webapps。在這種情況下,它將無法工作。也就是說,我現在只測試一個webapp,所以我會給這個鏡頭一個鏡頭。順便說一句,我正在使用tomcat ...同樣的概念適用於! – threejeez

+0

你可以爲另一個webapp添加另一個虛擬主機,所以你可以在一臺服務器上測試多個webapps(但是使用不同的虛擬主機) – pawlik

+0

正確,但只有一個可以在根目錄下(「/」)。所以從理論上講,所有其他webapps的javascript都會遇到與上下文路徑相同的問題。我確實對我的tomcat配置進行了同義改變,並且一切都很好。感謝您的建議! – threejeez

0

我有問題,並強調了一段時間後意識到,你可以使用*作爲前綴爲您的路線,以消除與網絡方面的問題:

*posts/1/load 

唯一的缺點是,該航線解決方案需要做更多的工作,但鑑於它的客戶端應該是微不足道的。

雖然你的路由在開發,qa生產之間應該沒有區別,但我認爲可以說很多web應用程序都被編寫爲context context,所以客戶端的東西應該跟隨imho。