1

メテオ ヘルパーからオリジナル にアクセスする方法を教えてください。TemplateInstance私は知っていますが、ヘルパーが定義されたテンプレート インスタンスではなく、Template.instance()ヘルパーが呼び出されたテンプレート インスタンスを返すようです。

2 つの小さなテンプレートがあるとします。

<template name='demo'>
  <h1>{{helper}}</h1>
  {{# border}}
    <h2>{{helper}}</h2>
  {{/border}}
</template>

<template name='border'>
  <div style="border:1px solid red">
    {{> UI.contentBlock}}
  </div>
</template>

次の動作で:

Template.demo.created = function() {
  this.result = "OK";
}

Template.demo.helpers({
  helper: function() {
    var tmpl = Template.instance();
    return tmpl.result || "FAILED";
  }
});

テンプレートに対して 2 つの「OK」を取得することを期待していましdemoた。2 つ目は赤い枠内にあるはずです。ただし、 Template.instance() はTemplateInstance、所有者テンプレートの最上位でヘルパーが呼び出された場合にのみオリジナルを返すため、結果は "FAILED" (もちろん赤い境界線) になります。

質問:オリジナルを取得するためのパブリックAPIはありますかTemplateInstance(トラバースする必要はありませview/parentView/_templateInstaceん)。

4

3 に答える 3

0

これを行う最善の方法は、セッション変数を設定するか、リアクティブ変数を使用することです (reactive-var パッケージを使用 - here is the documentation )。

これがどのように行われるかを示すために、流星群を作成しまし

基本的:

Template.demo.created = function() {
    result = new ReactiveVar('OK');
}

Template.demo.helpers({
    helper: function() {
        return result.get() || "FAILED";
    }
});
于 2015-02-15T19:52:07.810 に答える
0

既知のようで、既に修正済み (?) Meteor のバグです。詳細はこちら: https://github.com/meteor/meteor/issues/3745

rclaiGitHubからのコメント:

これは、次のリリースですでに対処され、修正されています。

meteor を次のように実行します。まだ機能するかどうかはわかりません: meteor --release TEMPLATE-CURRENT-DATA@0.0.1

もう 1 つの代替手段はaldeed:template-extensions、特にテンプレート インスタンスの処理に関して非常に優れた機能を備えた を使用することです。テンプレート インスタンスを取得する方法は、この問題の回避策であると考えています。

于 2015-02-17T19:43:24.970 に答える
0

あなたの主な問題は、テンプレートのインスタンス変数を正しく設定していないことだと思います。以下のコードを試してください...

インスタンス変数を設定します。

Template.instance().result.set("OK");

インスタンス変数を取得します。

Template.instance().get("result");

したがって、更新されたコードは次のようになります。

Template.demo.created = function() {
    Template.instance().result.set("OK");
}

Template.demo.helpers({
    helper: function() {
        return Template.instance().get("result") || "FAILED";
    }
});
于 2015-02-15T18:40:19.860 に答える