我的网络应用程序使用了大量的javascript,在javascript中我有消息,我会向用户报告。
从我的javascript中提取文本并将其外部存储在另一个.js语言文件中的最佳方法是什么?我将如何在我的js代码中引用它?
这方面的最佳做法是什么?
答案 0 :(得分:17)
创建一个对象文字:
var messages = {
welcome: "Welcome",
goodbye: "Goodbye",
error: "Something bad happend. Sowwy!"
};
然后你可以参考,如下:
if (error) alert(messages.error);
如果您想要实现多种语言,这非常有用。我通常做的是包括一个服务器端文件,它根据在应用程序配置中选择的任何语言或根据UI文化(在ASP.NET的情况下)呈现“消息”对象。
以下是您如何使用它,内联:
<head>
<!-- messages.aspx renders out the object literal -->
<script type="text/javascript" src="messages.aspx"></script>
<script type="text/javascript">
/* when messages.aspx is included it provides you with an object literal
as a global variable. The example below would alert "Something bad
happend. Sowwy!" */
if (error) alert(messages.error);
</script>
</head>
使用对象文字的巧妙之处在于代码更加冗长。不是像以下那样使用数组:alert(messages[0])
你这样做:alert(messages.error)
这更具说明性。
旁注:所有消息都在一个对象中定义,而不是由一堆变量定义,从而避免污染全局命名空间。
在JavaScript中,您可以在运行时修改对象。因此,如果您希望稍后在代码中添加更多消息,那么您只需执行此操作:
messages.newMessageAddedLaterOnInTheCode = "This is a new message";
答案 1 :(得分:5)
我看到其他人告诉你如何将它存储在JS文件中(如你所知)。但我可以建议您将其存储在XML文件中吗?管理起来比较容易(IMO)。
创建一个XML文件,其条目如下:
<text id="welcome_to_site">Welcome to our site!</text>
<text id="come_back_soon">Come back soon!</text>
然后,您可以轻松地获取常规JS / jQuery中所需的所有文本:
var text = new Object();
$.ajax({
async: false,
type: 'GET',
url: 'text.xml',
dataType: "xml",
success: function(xml){
$(xml).find('text').each(function(){
text[$(this).attr('id')] = $(this).text();
});
}
});
要调用一些文本,就像这样简单:
alert(text['welcome_to_site']);
您可以随时在XML文件中轻松更改它:添加文本,删除文本,编辑文本。这很简单。它还有助于分离您的设计并为您打开大门,允许其他人编辑文本,如果他们不得不对一堆JavaScript进行排序,则可能无法进行编辑。
答案 2 :(得分:1)
一种方法是在页面中有一个单独的js包含实际指向服务器端脚本的内容。然后,此脚本可以回显出您需要的字符串,如下所示:
var STRINGS = {'greeting': "Hello", 'error': "Something went wrong"};
在您的网页上有这样的:
我们这里为http://addons.mozilla.org执行此操作:http://addons.mozilla.org/en-US/firefox/pages/js_constants.js