我使用MeteorJS开发了一款应用。一切都很好。我面临的一个小问题,即当我重新加载页面时,自定义javascript停止工作。
我在应用程序中实现了表排序javascript库(http://tablesorter.com/docs/)。重新加载后,页面排序停止工作,但当我导航到另一个页面并返回到同一页面时,它工作正常。
以下是我用于在表格上应用排序的代码。
$(document).ready(function () {
$("table").tablesorter();
});
我也尝试在MeteorJS的onRendered方法中添加此代码
Template.captable.onRendered(function () {
$("table").tablesorter();
});
当我在硬盘重新加载页面后在控制台中执行 $(“table”)。tablesorter(); 时,它开始工作。
答案 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();
});
});