1

特定の条件に基づいてさまざまなオートフォーム ステップを含むカスタム フォーム ウィザードを作成しようとしています。簡単な meteorPad の例を以下にリンクします。リアクティブ データ ソース (セッション変数) が変更されると、リアクティブ計算 (テンプレート ヘルパー) が実行され、コンソール出力で確認されます。ただし、テンプレートは更新されず、ステップ数は同じままです。テンプレートを正しく更新するために必要なことはありますか? ありがとう! http://meteorpad.com/pad/cPWShRiTKYpBaMahn/リーダーボード

html

<body>
  {{> basicWizard}}
  {{> changeSteps}}
</body>

<template name="basicWizard">
<!--shouldn't the steps variable update when the helper runs?-->
  {{> wizard id="basic-wizard" steps=steps}}
</template>

<template name="changeSteps">
 <button id="changeStepsButton"> change number of Steps </button>
</template>

クライアントコード

Session.set('twoSteps', false);

information = new SimpleSchema({
  password: {
    type: String,
    label: 'password',
  },
});
confirm = new SimpleSchema({
  userName: {
    type: String,
    label: 'blah',
  },
});

Template.basicWizard.helpers({
    steps: function() {
      var ret = [];
      if (Session.get("twoSteps")) {
      ret[ret.length] = 
        {
          id: 'information',
          title: 'Information',
          schema: information,
        }
      }
      ret[ret.length] = 
        {
          id: 'confirm',
          title: 'Confirm',
          schema: confirm  ,
        }
      console.log("num steps: " + ret.length)
      return ret;
    }
  });

Template.changeSteps.events({
  "click #changeStepsButton": function (event) {
    Session.set('twoSteps', !Session.get("twoSteps")); 
  }, 
})
4

1 に答える 1

1

問題は、ウィザードがステップを反応的に処理しないことです。Wizardパッケージの次のコードだと思います:

以下の「new WizardConstructor」呼び出しは、反応性が壊れていると思われる場所です。デフォルトID; this.wizard = wizardsById[id] = new WizardConstructor(this.data); };

ウィザード コンストラクターのどこかで次の呼び出しが行われます: _.each(this.steps, function(step) { self._initStep(step); });

しかし、Meteor は "this.data" が変更されたときにテンプレートを再作成することを知っているとは思いません。技術的には、ウィザードは「ステップ」にバインドされていないため、機能していません。ウィザード パッケージの作成者は、このように使用することを意図していなかったのではないかと思います。

于 2015-05-03T21:27:52.707 に答える