我正在构建一个模块化 javascript 应用程序(RequireJS/Backbone),并且正在寻找一些关于将服务器端 URL 传播到 JS 应用程序以用于客户端模板、API 请求等的最佳实践的建议。
将其注入到启动 Javascript 应用程序的基本模板中?专门为此目的的 API 请求?
很想听听其他人使用过的解决方案。谢谢!
我正在构建一个模块化 javascript 应用程序(RequireJS/Backbone),并且正在寻找一些关于将服务器端 URL 传播到 JS 应用程序以用于客户端模板、API 请求等的最佳实践的建议。
将其注入到启动 Javascript 应用程序的基本模板中?专门为此目的的 API 请求?
很想听听其他人使用过的解决方案。谢谢!
您可以在 中呈现一个<script>
标签body
,定义一个模块并以您喜欢的任何方式将您的 URL 放在那里。
之后,您可以在模块(.js 文件)中使用它。
HTML(例如您的应用程序布局):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inline RequireJS define</title>
</head>
<body>
<h1 id="foo-holder"></h1>
<a id="sign-up-link" href="#"></a>
<script>
// This is rendered by your server-side application:
define('data/config', function(require, exports, module) {
exports.Url = {
HOME: 'https://mysite.com',
SIGN_IN: 'https://mysite.com/sign-in',
SIGN_UP: 'https://mysite.com/sign-up',
LOG_OUT: 'https://mysite.com/log-out'
};
exports.foo = 'bar';
});
</script>
</body>
</html>
JavaScript(在您的模块中的某处):
// This is somewhere in your JavaScript module
require(['data/config'], function(Config) {
$('#foo-holder').text(Config.foo);
$('#sign-up-link')
.text(Config.Url.SIGN_UP)
.attr('href', Config.Url.SIGN_UP);
});
另一个技巧可以通过某种属性绑定来完成。
在您的布局中:
<a data-url="HOME" href="#">Home</a>
<a data-url="SIGN_IN" href="#">Sign In</a>
<a data-url="SIGN_UP" href="#">Sign Up</a>
<a data-url="LOG_OUT" href="#">Log Out</a>
<script>
// This is rendered by your server-side application:
define('data/config', function(require, exports, module) {
exports.Url = {
HOME: 'https://mysite.com',
SIGN_IN: 'https://mysite.com/sign-in',
SIGN_UP: 'https://mysite.com/sign-up',
LOG_OUT: 'https://mysite.com/log-out'
};
exports.foo = 'bar';
});
</script>
在您的 JavaScript 文件中:
// This is somewhere in your JavaScript module
require(['data/config'], function(Config) {
$('a[data-url]').each(function() {
var $a,
urlConstant,
url;
$a = $(this);
urlConstant = $a.data('url');
url = Config.Url[urlConstant];
if(url) {
$a.attr('href', url);
}
});
});