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

时间:2016-07-29 05:07:02

标签: javascript jquery meteor meteor-blaze flow-router

我使用MeteorJS开发了一款应用。一切都很好。我面临的一个小问题,即当我重新加载页面时,自定义javascript停止工作。

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

以下是我用于在表格上应用排序的代码。

$(document).ready(function () {
    $("table").tablesorter();
});

我也尝试在MeteorJS的onRendered方法中添加此代码

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

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

1 个答案:

答案 0 :(得分:0)

听起来你在所有数据到达之前都在调用.tablesorter()

首次加载Meteor页面时(与硬重载一样),所有订阅都将重置为空。因此客户端上没有可用的数据。

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

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

您需要做的是等待拨打.tablesorter(),直到您的订阅为.ready()。由于onRendered()不是被动的,因此您需要定义一个自动运行来执行此操作。如果您关注the recommended pattern for template subscriptions,它看起来像这样:

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();
    });
});