我有一个helper.html页面,我需要将其包含在我的Meteor应用程序中以帮助使用api。看起来像这样。
<head>
<script type="text/javascript" src="https://www.example.com/api-helper.js"> </script>
</head>
<body>
</body>
现在我把它放在我的应用程序的根目录中。就像现在一样,这里有一些问题:我在main.html中包含的另一个api脚本无法找到helper.html。其次,我在控制台中收到此错误:错误:哦不!找不到路径的路线:&#34; /helper.html?。所以我的问题是如何将这个助手html页面正确地包含在我的Meteor项目中?非常感谢。
由于
答案 0 :(得分:1)
将您的html文件放入根文件夹中名为public
的文件夹中。
答案 1 :(得分:1)
Error: Oh no! No route found for path: "/helper.html"
这是铁的一个错误:路由器,它抱怨它无法找到任何路径&#34; helper.html&#34;。
我想您在浏览器地址栏中直接键入http://localhost:3000/helper.html
时会收到此错误消息,这是错误的,因为这不是铁路:路由器应该如何工作。
iron:路由器使用HTML5推送状态API管理纯客户端路由,这与请求&#34; /helper.html"时涉及的传统服务器端路由相反;到Apache或nginx意味着服务器将向您发送浏览器显示的实际HTML响应页面。
在Meteor&#34;单页应用程序&#34;中,服务器不向客户端发送任何HTML响应,它只发送数据。这意味着路由完全在客户端中进行,地址栏中的URL被解析并且铁:路由器提供相应的响应实用程序,这通常涉及根据您命中的路径(路由)呈现不同的模板。
我希望您真正了解这两种方法之间的性质差异,因为在使用Meteor进行开发时,了解这一点非常重要。
就您的问题而言,我将把DISQUS集成作为一个例子,这似乎是一个类似的问题。
DISQUS在标准PHP解决方案上的集成非常简单,您只需要复制粘贴这个所谓的通用嵌入代码:
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = '<example>'; // Required - Replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
这很好,因为一旦在传统网站中将页面发送到客户端,javascript代码就会被执行一次,我们就完成了:如果用户点击网站上的另一个页面,那么生成HTML响应的所有过程,将它发送到客户端并执行JS代码将从头开始。
但是,我们不能将此代码复制粘贴到Meteor模板中,因为Meteor webapps是单页应用程序&#34;,在这些类型的网站中不应该发生页面重新加载过程。
当我们导航到Meteor应用程序中的另一个页面时,javascript上下文保持不变,我们不希望DISQUS脚本重新执行。我们需要做的是在我们模板的渲染回调中只加载一次脚本。
因此我们提出了以下Meteor模板逻辑来集成DISQUS注释loading:
<template name="disqus">
<div id="disqus_thread"></div>
<a href="http://disqus.com" class="dsq-brlink">
blog comments powered by <span class="logo-disqus">Disqus</span>
</a>
</template>
Template.disqus.rendered=function(){
// assumes we get identifier and title as data context
var identifier=this.data.identifier;
var title=this.data.title;
// we need a way to tell if the script has already been loaded or if it's
// the first time, we can check for the existence of the DISQUS variable on
// the global window object to make the difference
if(window.DISQUS){
// DISQUS API has our back, see this resource
// https://help.disqus.com/customer/portal/articles/472107-using-disqus-on-ajax-sites
window.DISQUS.reset({
reload:true,
config:function(){
this.page.identifier=identifier;
this.page.title=title;
}
});
}
else{
// first initialization
window.disqus_shortname = "disqus-shortname";
window.disqus_identifier = identifier;
window.disqus_title = title;
window.disqus_developer = 1;
// load the script via JS instead of embedding it in the HTML
var script = $("<script>",{
type:"text/javascript",
async:true,
src:"//" + disqus_shortname + ".disqus.com/embed.js"
});
$("head").append(script);
}
};
此示例演示了当您需要在Meteor网站中嵌入API代码(google-analytics,DISQUS等)时的方法。