2016-07-29 1 views
1

私はMeteorJSを使ってアプリを開発しました。すべてがうまくいきます。私が直面している小さな問題、つまり、ハード・リロードすると、カスタム・ジャバスクリプトが動作を停止します。Javascript MeteorJSのハードページのリロードをやめること

アプリケーションでテーブルソート用のjavascriptライブラリ(http://tablesorter.com/docs/)を実装しました。再読み込み後、ページの並べ替えが停止しますが、別のページに移動して同じページに戻ったときに正常に動作しています。

ここでは、テーブルに並べ替えを適用するために使用したコードを示します。

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

また、私は$( "表")を実行するとMeteorJS

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

のonRendered方法でこのコードを追加しようとしたtablesorter()。ハード・リロード・ページの後にコンソールのが動作を開始します。

答えて

0

すべてのデータが届く前に.tablesorter()と呼んでいるようです。

メーターページを初めて読み込むと(ハードリロードの場合と同じように)、すべてのサブスクリプションが空にリセットされます。したがって、クライアントで利用できるデータはありません。

あなたのアプリケーションのJavaScriptがロードされ、実行を開始します:データを取得するためにサブスクライブすると、すぐにテンプレートがレンダリングされますが、の前にのサブスクリプションデータがサーバーから実際に到着します。

あなたのテンプレートは、データが到着すると再レンダリングされますが、onRendered()はすでに1回発射されており、再起動しません。

あなたのサブスクリプションが.ready()になるまで、.tablesorter()に電話するとお待ちください。 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(); 
    }); 
}); 
+0

何単にの 'onReady'コールバックの使用について[' ')(サブスクライブ](http://docs.meteor.com/api/pubsub.html#流星群 - 購読)? – ghybs

+0

申し訳ありませんが、サブスクリプションが自動実行がないために優れているテンプレートレベルのサブスクリプションである場合、OPは彼の購読方法を示さず、私の個人的な好みはテンプレート内でそのコンテキストを持つことをしています。 –

+0

@Jesper私は理解できませんでした** captableSubscription.ready()**あなたはそれを説明できますか? –

関連する問題