0

セッション変数が変更されたときにブロックヘルパーを再レンダリングしたい。

UI.registerHelper "myHelper", () ->
  this.changedSession = Session.get 'someSessionVariable'
  return Template.myTemplate

ヘルパーは実際に実行されますが、ビューは更新されません。理想的には、ヘルパーがレンダリングする部分のみが再レンダリングされます (Template.myTemplate)。ただし、ページ全体を再レンダリングすることもオプションです。

これどうやってするの?

私の問題を説明する非常に単純なアプリ:

コーヒースクリプト:

if Meteor.isClient
  Template.hello.greeting = () ->
    Session.get "greeting"

UI.registerHelper "myHelper", (options) ->
  this['greeting'] = Session.get 'greeting'
  return Template.test

HTML:

<template name="hello">
  {{greeting}}
  {{#myHelper test="test" more="more"}}

  {{/myHelper}}
</template>

<template name="test">
    {{this.greeting}}
</template>

セッション変数を変更した場合。挨拶自体は更新されますが、挨拶を含むテンプレートは更新されません。

これはヘルパーでセッションを取得する流星の方法ではないことはわかっていますが、これをプロトタイピング フレームワークに使用しており、このヘルパーはヘルパーのデータ コンテキストを定義せずに任意のテンプレートで使用できます。

4

2 に答える 2

1

これは正しい動作のようです。セッション変数自体に依存しない限り、ビューは更新されません。ただし、これを回避する方法があります。返す代わりに、Template.myTemplateこれを返してみてください:

Template.myTemplate.extend({
  render: function () {
    // do something with your session here ...
    return Template.myTemplate.render.apply(this, arguments);
  }
});
于 2014-07-18T14:25:50.007 に答える
0

Meteor 1.0 の場合、次のことができます。

ブロックヘルパーで次のようにします。

UI.registerHelper "myHelper", (options) ->
  new Template Template.myTemplate.viewName, ->
    Session.get 'something' #do something reactive...
    return Template.myTemplate.renderFunction.apply this, arguments

ヘルパーが使用されているテンプレートを実際に知っている場合は、https://stackoverflow.com/a/23450884/2037537で説明されている可能性のいずれかを使用することをお勧めします。私の例では、ブロック ヘルパーを実際に使用するテンプレートを知らなくても、ブロック ヘルパーがどこでも機能する必要がありました。

于 2014-11-14T09:49:33.810 に答える