需要在我的流星项目中包含一个帮助器html页面

时间:2014-08-27 01:25:11

标签: meteor

我有一个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项目中?非常感谢。

由于

2 个答案:

答案 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等)时的方法。