我正在开发一个简单的 Pyramid 应用程序,我在其中使用 JQuery 执行 AJAX 请求。到目前为止,我的变色龙模板中有我的 javascript 代码。现在我想将我的 javascript 提取到另一个位置(例如作为静态资源)。
我的问题是我发现我的 javascript 代码依赖于动态生成的内容,如下所示:
$.post("${request.route_url('my_view')}",{'data': 'some data'}, function(html){
$("#destination").html(html);
});
动态元素是:
"${request.route_url('my_view')}"
在模板中调用请求对象的 route_url 方法。
是否有公认的模式将此类 javascript 文件分离到它们自己的模板中并为它们提供路由和 View ,或者我只是将我的 javascript 保留在我的页面模板中?
最佳答案
是的;您通常将特定于上下文的信息(如扩展路由)放入模板中,并从您的(静态)JavaScript 库访问此信息。
根据喜好,可以通过多种方式包含上下文信息:
您可以在生成的 HTML 中的标签上使用数据属性:
<body data-viewurl="http://www.example.com/route/to/view"> ... </body>
然后,您在静态 JS 代码中加载 jQuery
.data()
function :var viewurl = $('body').data('viewurl');
使用虚构的 LINK tag在文档头中包含链接的关系:
<head> <link rel="ajax-datasource" id="viewurl" href="http://www.example.com/route/to/view" /> ... </head>
可以使用
$('link#viewurl').attr('href')
或$('link[rel=ajax-datasource]').attr 检索('href')
。这仅适用于 URL 信息。直接在您的模板中生成 JS 变量,以便从您的静态代码中引用:
<head> ... <script type="text/javascript"> window.contextVariables = { viewurl = "http://www.example.com/route/to/view", ... }; </script> </head>
并且这些变量可以直接使用
contextVariables.viewurl
进行引用。
关于javascript - JavaScript 文件的变色龙模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11155947/