問題タブ [meteor-tracker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
210 参照

javascript - Meteor 以外の静的ページで Tracker.autorun を使用するにはどうすればよいですか?

私のサイトの一部のページはサーバー側でレンダリングされるため、Meteor JavaScript の通常のバンドルは利用できません。

ページサイズを小さくしたいのですが、Tracker.autorun軽量の反応性に使用します。この Meteor a-la-carte の一部をどのように使用できますか?

0 投票する
1 に答える
795 参照

meteor - Meteor: Tracker.autorun と dep.changed が原因で無限ループが発生する

いくつかのことを追跡するために新しい Tracker.Dependency を使用していますが、以下のコードの自動実行が無限に実行されます。なにが問題ですか?以下のコードは、getSong と getSongId を分離して、dep だけでなく、dep と dep2 に依存するようにすれば問題ありません。

0 投票する
1 に答える
190 参照

meteor - 新しいデータが利用可能になったときにライブラリを再初期化する

私は現在、video.js-Library を使用する Meteor アプリケーションを開発しています。

次のテンプレートがあります。

テンプレートがレンダリングされた後の video.js-Library の初期化は正常に機能します。

ただし、同じテンプレートが別のビデオ (別の richMediaContent) でレンダリングされる場合、videojs-Library は再初期化されません。

新しいビデオが読み込まれるたびに onRendered-Call が呼び出されるように、既に video-Part を独自のテンプレートに移動して foo-Template に含めようとしました。しかし、これはうまくいかないようです。

ビデオが変更された場合にライブラリを再初期化する方法を知っていますか?

前もって感謝します!

0 投票する
1 に答える
33 参照

meteor - Meteor tracker が予期せずスキップする

トラッカーに関するチュートリアルに従っていますが、予期しない動作が見られます。

ここでは、getter と setter を使用して、setterTracker.autorun()を呼び出すたびに呼び出されることを確認しています。

ブラウザ コンソールを開くと、

しかし、何回呼び出しても、最初と最後のものだけが表示されsetFavoriteFood()ます。

なぜこうなった?

0 投票する
0 に答える
279 参照

javascript - まだ存在しない可能性があるリアクティブ オブジェクト フィールドにリアクティブ依存関係を作成するにはどうすればよいですか?

良い反応性に満ちたオブジェクトを考えると、

Tracker 計算を使用して、これらのフィールドに簡単に対応できます。

ただし、後日定義されることがわかっていて、定義されたらすぐobj.bazに対応したい場合は、それを行うことはできません。

これは、obj.baz定義せずに実行すると、依存関係が追加されず、表示または変更されても再実行されないために発生します。obj.baz反応する唯一の方法は、 が定義されている間に計算を無効にするfooか、 を呼び出して依存関係を作成することです。barbaz.get()

まだ定義されていないオブジェクト フィールドの作成にどのように対応すればよいですか? 答えはES5の方がいいと思いますが、ES6でもES7でも大丈夫です。

0 投票する
0 に答える
34 参照

javascript - 1 つの Jasmine 記述ブロックで複数の計算を使用すると、トラッカーの反応性がちょうど半分の時間で開始されないのはなぜですか?

Jasmine で反応性をテストすると、いくつかの Tracker 計算が非常に興味深い方法で動作し始めました。ちょうど半分の計算が反応し、残りの半分はそうではありません。

この動作をテストするために私が行ったことは次のとおりです。

だから基本的に:

  1. fooリアクティブを に初期化しfalseます。
  2. 追跡を開始し、到達するのを待っtrueて、テストがdone().
  3. タイムアウトを使用しfoo.set(true)てテストを解決します。
  4. もう必要ないので、この計算を停止します。

では、別の変数を使用してまったく同じことを行いましょう。

そこから楽しみが始まります。このテストはまったく同じコードですが、名前が異なり、まったく同じロジックが記述されていますが、計算追跡バーが再実行されないため失敗します

console.logそれを非常によく示しています:

その計算における fooは: その計算false
における foo は: true - 反応性が開始されました!
その計算の棒は: false
[Nothing]

fooの計算が再実行され、テストが完了したことは明らかですが、 の計算barは決して無効にされないため、テストは失敗します。

ただし、これで終わりではありません。新しいリアクティブ変数 (たとえばbaz) に 3 番目のテスト ケースを追加し、前と同じ手順に従うと (他の変数で初期化し、同じdescribe関数の最後にテストを追加する)、完全に機能します。

ここで、テストは(1)成功し、テスト(2)は失敗し、テストは(3)成功します。

catここで、同じ手順に従って、たとえば新しいものを使用して 4 番目のテストを追加すると、テスト(4)は次のログで失敗します。

foo の計算はfalse
foo の計算はtrue
bar の計算はfalse bar は再実行されず失敗
する baz の計算はfalse
baz の計算はtrue
cat の計算はfalse cat は再実行されず失敗
する

fooとではなくにbaz反応しました。barcat

私は他の 2 つ (5 番目と 6 番目) でそれを実行しましたが、同じ結果:(5)成功し、(6)失敗しました。
「奇数」のテストは成功し、「偶数」のテストは失敗します。

完全再現コード:

なぜこうなった?これらすべてのリアクティブ変数を同じ関数
に保持しながら、この問題を解決するにはどうすればよいですか?describe


ネストされたdescribe関数を追加しようとしましたが、成功しませんでした。
この問題は、関連のない関数でテストを分離すると魔法のように消えdescribeます。そのような方法で回答しないでください。