2009-07-06 67 views
13

我希望JavaScript代碼與視圖分離。
我實現本地化由JavaScript生成一個簡單的圖像按鈕的要求:如何處理JavaScript文件中的本地化?

<img src="..." onclick="..." title="Close" /> 

什麼是定位它的標題最好的技術?

PS:我找到了Ayende的a solution。這是正確的方向。

編輯:
我本地化輔助類,它提供了Controller.Resource('foo')擴展方法。

我在考慮擴展它(helper),以便它可以通過其名稱返回指定控制器的所有JavaScript資源(來自App_LocalResources的「ClientSideResources」子文件夾)。然後 - 在BaseController中調用它,將它添加到ViewData並將其呈現在Layout中。

這是個好主意嗎?

回答

9

編輯

考慮編寫必要的本地化資源爲JavaScript對象(散),然後用它來查找你的動態創建的對象。我認爲這比回到服務器翻譯更好。這與通過viewdata添加它類似,但可能會更靈活一些。 FWIW,我可以將本地化資源視爲View的一部分,而不是控制器的一部分。

在查看:

<script type="text/javascript" 
     src='<%= Url.Content("~/Resources/Load?translate=Close,Open" %>'></script> 

這將輸出類似:

var local = {}; 
local.Close = "Close"; 
local.Open = "Open"; 

沒有它會輸出整個翻譯哈希參數。使用參數可以讓您自定義每個視圖。

你會然後用它在你的JavaScript文件,如:

$(function(){ 
    $('#button').click(function() { 
     $("<img src=... title='" + local.Close + "' />") 
      .appendTo("#someDiv") 
      .click(function() { ... }); 
    }); 
}); 

其實,我不是太大驚小怪,只要JavaScript代碼是本地化讓我的JavaScript代碼了自己的看法在容器。通常我會將主頁設置爲4個內容區域:標題,標題,主要和腳本。標題,標題和主要內容放在您期望的位置,腳本區域位於內容的底部。

我把我所有的JavaScript包括,包括任何viewusercontrols,到腳本容器。包含特定於視圖的JavaScript代碼。我根據需要將共享代碼重構回腳本。我想過使用控制器方法來整理腳本包括,也就是說,包括多個腳本使用單個請求,但還沒有得到解決。

這樣做的好處是可以將JavaScript代碼分開以保持可讀性,還可以根據需要輕鬆地將模型或查看數據注入JavaScript代碼。

+0

「我想JavaScript從視圖中分離出來。」 ==「還有一個很好的做法,讓你的JavaScript與你的標記分開。」 <=這就是爲什麼<%= foo %>不起作用的問題。 – 2009-07-06 13:03:49

+0

順便說一句,爲什麼附加JS onload onclick處理程序是可取的? – 2009-07-06 13:05:56

+0

我錯過了「由JS生成」部分的問題 - 剛剛掃描它。在這種情況下,我會考慮將本地化數據寫入視圖並讓JavaScript從本地對象中加載它。將重寫。 – tvanfosson 2009-07-06 13:35:38

1

如果你堅持保留它分開,你可以這樣做:

//keep all of your localised vars somewhere 
var title = '{title_from_server}'; 
document.getElementById('someImage').title = title; 

記住,如果你使用JavaScript代碼來初始化元素的任何文本,你的網站會降低可怕的地方JavaScript不可用。