【问题标题】:MeteorJS not running external script.js on reload?MeteorJS 在重新加载时没有运行外部 script.js?
【发布时间】:2016-02-15 04:38:01
【问题描述】:

我目前正在运行一个已编译的 scripts.js 文件,该文件使用 onRendered 方法激活了一系列不同的 UI 功能(砌体、导航栏等)。

Template.mainLayout.onRendered( function() {
    $.getScript('js/scripts.js');
});

我的问题是,如果我导航到像 /team 这样的另一个页面,脚本不会重新运行,这意味着在其他页面中,砌体不再起作用。另外,当我回到主页时,脚本也会中断,导致导航栏损坏。

如果我使用此功能有误,请告诉我?

【问题讨论】:

  • 你在 Iron 路由器中使用mainLayout 吗?
  • 不,我正在使用流路由器和 blaze 布局。我现在使用相同的功能直接在 scripts.js 文件中加载脚本。

标签: javascript jquery meteor


【解决方案1】:

如果您自己托管脚本,请将它们放在您的 client/compatibility 文件夹中。 Meteor 会自动将它们包含在您的应用中。

如果您想从 CDN 加载它们,请编辑您的 client/index.html 文件夹以添加 script 标记。

然后在您的onRendered 回调中,放入初始化您的自定义脚本的代码,例如this.$('table').datatable() 或其他。

【讨论】:

  • 现在找到更接近的解决方案。通过客户端/兼容性加载它们,我现在已经将范围限定在未重新加载的代码中。但是 onRendered 仅初始化我的脚本,我如何在每次重新加载(到新路由)时重新初始化该脚本?
  • 如果onRendered 没有重新运行,那是因为您的模板没有重新渲染——即使它消失并返回(即您更改路线并返回)。要强制它重新渲染,它需要包含一个变化的变量;例如,返回Date.now() 或类似的助手。如果这感觉很奇怪,那是因为它是——如果认为你的模板需要在 Meteor 认为不需要的时候重新渲染,那么更大的可能是错误的。我建议您在新问题中发布您的具体情况/代码(包括 jQuery 插件或您可能尝试初始化的类似内容)。
  • 我试过这个:Template.mainLayout.helpers({ reactivity: Date.now() });这只是一个学习项目,所以hacky很好。但是,即使我设置了一个不断变化的变量,它似乎仍然没有强制重新渲染。
【解决方案2】:

Eddie,.getscript() 是一个异步函数,所以你需要指定一个回调。我需要在流星中为传单插件加载一个外部 JS。使用异步,定义回调函数就行了:

    $.getScript('js/l.control.geosearch.js', function( data, textStatus, jqxhr ) {
        $.getScript('js/l.geosearch.provider.google.js', function( data, textStatus, jqxhr ) {
            new L.Control.GeoSearch({
                provider: new L.GeoSearch.Provider.Google(),
                position: 'topcenter',
                showMarker: false,
                retainZoomLevel: true,
            }).addTo(map);
        })
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2011-06-23
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多