Javascript停止在MeteorJS中重新加载硬页面

Javascript停止在MeteorJS中重新加载硬页面,javascript,jquery,meteor,meteor-blaze,flow-router,Javascript,Jquery,Meteor,Meteor Blaze,Flow Router,我用MeteorJS开发了一个应用程序。一切正常。我面临的一个小问题是,当我硬加载页面时,自定义javascript停止工作 我已经在应用程序中实现了表排序javascript库()。重新加载页面后,排序停止工作,但当我导航到另一个页面并返回到同一页面时,排序工作正常 下面是我用来对表应用排序的代码 $(document).ready(function () { $("table").tablesorter(); }); 我还尝试在MeteorJS的onRendered方法中添加此代码

我用MeteorJS开发了一个应用程序。一切正常。我面临的一个小问题是,当我硬加载页面时,自定义javascript停止工作

我已经在应用程序中实现了表排序javascript库()。重新加载页面后,排序停止工作,但当我导航到另一个页面并返回到同一页面时,排序工作正常

下面是我用来对表应用排序的代码

$(document).ready(function () {
    $("table").tablesorter();
});
我还尝试在MeteorJS的onRendered方法中添加此代码

Template.captable.onRendered(function () {
    $("table").tablesorter();
});

当我执行$(“table”).tablesorter()时在控制台中,在硬加载页面后,它开始工作。

听起来好像在所有数据到达之前调用了
.tablesorter()

当您第一次加载Meteor页面时(就像硬重新加载一样),所有订阅都会重置为空。因此,客户端上没有可用的数据

然后你的应用程序javascript加载并开始执行:你调用subscribe获取数据,然后你的模板很快就会呈现出来,但是在订阅数据实际从服务器到达之前

当数据到达时,您的模板将被重新呈现,但是
onRendered()
已经触发过一次,并且不会再次触发

您需要做的是等待调用
.tablesorter()
,直到您的订阅
.ready()
。由于
onRendered()
不是被动的,因此需要定义自动运行来执行此操作。如果您遵循,它看起来如下所示:

Template.captable.onCreated( function() {
    this.subscribe('captable'); // ...or whatever your publication name is.
});

Template.captable.onRendered(function () {
    this.autorun( function() {
        if( Template.instance().subscriptionsReady() ) $("table").tablesorter();
    });
});

听起来好像在所有数据到达之前调用了
.tablesorter()

当您第一次加载Meteor页面时(就像硬重新加载一样),所有订阅都会重置为空。因此,客户端上没有可用的数据

然后你的应用程序javascript加载并开始执行:你调用subscribe获取数据,然后你的模板很快就会呈现出来,但是在订阅数据实际从服务器到达之前

当数据到达时,您的模板将被重新呈现,但是
onRendered()
已经触发过一次,并且不会再次触发

您需要做的是等待调用
.tablesorter()
,直到您的订阅
.ready()
。由于
onRendered()
不是被动的,因此需要定义自动运行来执行此操作。如果您遵循,它看起来如下所示:

Template.captable.onCreated( function() {
    this.subscribe('captable'); // ...or whatever your publication name is.
});

Template.captable.onRendered(function () {
    this.autorun( function() {
        if( Template.instance().subscriptionsReady() ) $("table").tablesorter();
    });
});

简单地使用的
onReady
回调怎么样?好吧,如果订阅是一个模板级别的订阅,由于没有自动运行而更好,但是OP没有显示他是如何订阅的,我个人的偏好是在模板内做一些事情来获得上下文。@JesperWe我不理解captableSubscription.ready()你能解释一下吗?好的,我对答案做了一点修改,以展示如何根据MeteorGuide原则(答案中有链接)@JesperWe我在我的代码中实现了你的代码。它显示TypeError:this.subscriptionsReady不是窗口控制台中的函数。简单地使用的
onReady
回调如何?如果订阅是一个模板级订阅,由于没有自动运行而更好,但OP没有显示其订阅方式,我个人的偏好是在模板内做一些事情来获得上下文。@JesperWe我不理解captableSubscription.ready(),请您解释一下。好的,我对答案做了一些修改,以展示如何根据MeteorGuide原则(链接在答案中)@JesperWe我在我的代码中实现了您的代码。它显示TypeError:this.subscriptionsReady不是窗口控制台中的函数。