2016-08-03 22 views
2

から反応性の除去されていません。バックグラウンドで新しい値を保存すると、このヘルパーの結果を{{ titleNonreactive }}で表示しているフロントエンドで自動的に更新されます。流星Tracker.nonreactiveは()私はこのコードと非反応性流星ヘルパーを作るしようとしているヘルパー

どうすればこの問題を解決できますか?

+0

これはおそらくあなたのブレイズデータコンテキストに関係しています。 '{{title}} 'と' {{titleNonreactive}}'の両方を参照するBlazeテンプレートコードを表示できますか? – hwillson

答えて

3

これは、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> 
+0

私は、コードの先頭にあなたが使用している構文が不明です。流星は輸入を必要としません。そして、私が知る限り、空のスペースに変数を宣言するだけでは(let originalTitle)することはできません。 – jetlej

+0

データコンテキストは記事であるため、テンプレート内で{{title}}を使用するだけで記事タイトルを取得できます。 – jetlej

+0

この回答は正しいと思います。ヘルパーは、常にデータコンテキストで反応しません。 'title'が変更されると、その内部でアクセスされるデータソースにかかわらず、' Tracker.nonreactive'関数が再び呼び出されます。 @hwillsonのようなヘルパーの外でデータを取得すると、その問題を回避できます。 – chrisklaussner

関連する問題