JavaScript硬编码变量

3

我有一个简单的js文件:

//base.js

...
var url = '/post/' + id + '/comment';
...

我正在使用Symfony2,因此在服务器端所有的url都由Router生成,我很不喜欢在js中使用硬编码的url...
有没有办法使它们更加动态?以下是我考虑过但并不满意的解决方案:
  • 在HTML标记中定义它们,如<div data-url="<?php path('post_comment'); ?>">
  • 在内联script标记中定义它们,如<script language="text/javascript">...</script>
我认为一些大型网站(例如SO、GitHub等)中的js文件中的url都是硬编码的,我是对的吗?

我能想到的一个替代方案是在构建步骤中生成URL映射(并将它们保存在JavaScript对象中)。 - zerkms
我最终声明了一个全局命名空间对象,并将我需要的所有路径作为该对象的属性插入其中。我一点也不喜欢它...这是Symphony的一个限制,让我对这个框架失去了兴趣。 - JaredMcAteer
2个回答

1

Symfony JS Routing Bundle的朋友们正是为了满足您的需求而制作的

var url = Routing.generate('some_route_to_expose', { foo: 'bar' });
// url is http://somehost.com/app_dev.php/my_route

该捆绑包还允许您转储、编译和压缩生成的JavaScript代码。非常棒!

0
你至少应该通过在配置对象内定义所有的常量变量并使用属性名或getter函数访问它来最小化命名空间污染。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接