3

コールバックで入力の値を取得したいと思いAutoForm.hooks afterます。この入力は私のスキーマの一部ではなく、フォームの送信後に表示されるテンプレート (およびその他の舞台裏のもの) を決定します。autoform テンプレートでプレーン html を使用して入力を作成しています。

私は試した

insert: function(error, result, template){
    `$(template.firstNode).parent().find(".my-input").val()` 
}

ライブ入力ではなく、デフォルトのテンプレート html が表示されるようです。

この入力の値を取得する最良の方法は何ですか?

アップデート

afterjQueryを使用して入力を選択するだけで、コールバックで入力値を取得しようとしました。ただし、アフターコールバックが実行される前にオートフォームの何らかのメソッドを介してフォームがクリアされるため、それはできませんでした。

この値をコールバック内からグローバルに保存し、beforeコールバックでその値をチェックすることになりましたafter

これはまだハックな方法のように思えます。オートフォームを使用して「特別な」方法で入力を作成する必要がある場合でも、この値を何らかの方法で取得できるはずです。

もう 1 つの問題は、一度に DOM にこのフォームが複数ある可能性があることです。そのため、私のソリューションはそのインスタンスではうまく機能しません。

4

2 に答える 2

1

resetOnSuccess=false送信時に AutoForm が入力を消去しないようにするには、autoform テンプレートで指定できます。次に、フックで目的の入力の値を取得し、その後AutoForm.resetForm(formId)、フォームを手動でクリアするために呼び出します。

于 2015-03-13T19:23:49.390 に答える
0

この場合、あなたは何か間違ったことをしていると思います。autoform を使用して一種の「魔法」を保存するのは少し奇妙に聞こえます。

たとえば、セッションオブジェクトを使用してそこにデータを保存したり、特別なルートコントローラーを介してそれを実行できるかどうかを確認したりすることはできませんか?

AutoForm.addHooks(['wordForm'], {
  after: {    
    insert: function(error, word, template) {
      if(!error){
        url = Router.current().params;
        Router.go('wordsList', {
            languageId: url.languageId, 
            character: url.character});
        Session.set('isModalShown', false);
      }
    },
    update: function(error, word, template) {
      if(!error){
        url = Router.current().params;
        Router.go('wordsList', {
            languageId: url.languageId, 
            character: url.character});
        Session.set('isModalShown', false);
      }
    },
  }
});

この種のアプローチを使用して、保存後にモーダルを開閉し、このモーダルを URL に「バインド」しました。

于 2015-03-06T23:22:37.320 に答える