2

Meteor.js で Handlebar テンプレートを使用して複数選択しています。最初のレンダリングでは、すべて問題ありません ("Politics" と "People" は予想どおり事前に選択されています)。

最初のレンダリングで複数選択

テンプレートを再レンダリングする必要があるとすぐに (たとえば、セッション変数が変更されたためSession.set("foo", "Hello World!"))、3 番目のオプションは事前に選択されていません。

動的変更後の複数選択

私のセットアップ:

<template name="select">
  <select name="foo" multiple>
    <option value="1">Tech</option>
    <option value="2" selected>Politics</option>
    <option value="3" selected>People</option>
  </select>
</template>

<template name="test">
  {{foo}}
  {{> select}}
</template>

{{> test}}
Template.test.helpers(
  foo: ->
    Session.get("foo")
)

再レンダリング後にオプションが事前に選択されている理由がわかりましたか?

4

2 に答える 2

1

解決策は次のとおりです。

<template name="test">
  {{#isolate}}
    {{foo}}
  {{/isolate}}      
  {{> select}}
</template>

通常、再レンダリングの正確な範囲は重要ではありませんが、パフォーマンス上の理由などにより詳細な制御が必要な場合は、{{#isolate}}...{{/isolate}} ヘルパーを使用できます。#isolate ブロック内で確立されたデータの依存関係はブロックにローカライズされ、それ自体が親テンプレートを再レンダリングすることはありません。このブロック ヘルパーは基本的に、コンテンツを新しいサブテンプレートに引き出すことで得られる反応性の利点を伝えます。

{{foo}}内部に配置{{#isolate}} ... {{/isolate}}すると、親テンプレートは再レンダリングされないため、{{> select}}影響もありません。

于 2013-08-01T05:54:13.957 に答える