から反応性の除去されていません。バックグラウンドで新しい値を保存すると、このヘルパーの結果を{{ titleNonreactive }}
で表示しているフロントエンドで自動的に更新されます。流星Tracker.nonreactiveは()私はこのコードと非反応性流星ヘルパーを作るしようとしているヘルパー
どうすればこの問題を解決できますか?
から反応性の除去されていません。バックグラウンドで新しい値を保存すると、このヘルパーの結果を{{ titleNonreactive }}
で表示しているフロントエンドで自動的に更新されます。流星Tracker.nonreactiveは()私はこのコードと非反応性流星ヘルパーを作るしようとしているヘルパー
どうすればこの問題を解決できますか?
これは、Blazeのデータコンテキスト(原因を確認するためにテンプレートコードを確認する必要があります)が原因である可能性がありますが、ここにはTracker.nonreactive
を使用しない可能性のある解決策があります。 titleNonreactive
の値を反応させたくないので、元の反応性タイトルのコピーを保存するために、標準のローカル/非反応性変数を使用することができます。例えば:あなたのテンプレートで次に
import { Template } from 'meteor/templating';
import { articles } from '/imports/api/articles/collection';
import './main.html';
let originalTitle;
Template.body.onCreated(function onCreated() {
this.autorun(() => {
const article = articles.findOne();
if (article && !originalTitle) {
originalTitle = article.title;
}
});
});
Template.body.helpers({
article() {
return articles.findOne();
},
titleNonreactive() {
return originalTitle;
}
});
:
<ul>
{{#with article}}
<li>Reactive Title: {{title}}</li>
<li>Non-Reactive Title: {{titleNonreactive}}</li>
{{/with}}
</ul>
私は、コードの先頭にあなたが使用している構文が不明です。流星は輸入を必要としません。そして、私が知る限り、空のスペースに変数を宣言するだけでは(let originalTitle)することはできません。 – jetlej
データコンテキストは記事であるため、テンプレート内で{{title}}を使用するだけで記事タイトルを取得できます。 – jetlej
この回答は正しいと思います。ヘルパーは、常にデータコンテキストで反応しません。 'title'が変更されると、その内部でアクセスされるデータソースにかかわらず、' Tracker.nonreactive'関数が再び呼び出されます。 @hwillsonのようなヘルパーの外でデータを取得すると、その問題を回避できます。 – chrisklaussner
これはおそらくあなたのブレイズデータコンテキストに関係しています。 '{{title}} 'と' {{titleNonreactive}}'の両方を参照するBlazeテンプレートコードを表示できますか? – hwillson