0

autoformを介して複雑な入力セットの配列を持つことができるように、スキーマを設定しました。何かのようなもの:

address = {
  street:{
    type: String
  },
  city: {
    type: String
  },
  active_address: {
    type: Boolean,
    optional: true
  },
  ...
}

people: {
  name:{
    type: String
  },

  address:{
    type: [address],
    optional: true,
    defaultValue: []
  }
}

このように住所を追加することはオプションですが、住所を追加する場合はすべての住所フィールドが必須です。

Booleanフォームを送信しようとすると、チェックボックスがチェックされていなくても、「住所」の下のすべてのフィールドで必要なエラーがスローされます。

参考までに、次のようなフォームを作成しています。

{{#autoForm collection="people" id=formId type="insert" doc=getDocument autosave=true template="autoupdate"}}    
  {{> afQuickField name='name' template="autoupdate" placeholder="schemaLabel"}}
  {{> afQuickField name='address' template="autoupdate"}}
  ...
{{/autoForm}} 

オートフォームに付属のフォーム テンプレートに基づいて、カスタム フォーム テンプレートを多用しbootstrap3ています。

試した

次のようにフックを追加しようとしました:

 formToDoc:function(doc, ss, formId){
    for (var i = 0, l = doc.address.length; i < l; ++i){
      if (!doc.address[i].active_address){
        delete doc.address[i].active_address;
      };
    }
    return doc;
  }

これにより、送信の問題は解決されます""が、他の値には空の文字列でいっぱいの配列が挿入されます。これにより、私の他の質問に示されているように、更新フォームが混乱します。

問題は、配列が空ではなく、代わりに空の値のオブジェクトがあることです。フォーム内のすべての値を実行して、すべてのフィールドを削除することもできますが、それは非常にハックでコストがかかると感じます。

4

1 に答える 1

0

私は前回の評価で間違っていました。defaultValue: []person スキーマの address フィールドからを削除しました。フックで次のコードでそれを使用するとformToDoc、問題が修正されます。

for (var i = 0, l = doc.address.length; i < l; ++i){
  if (!doc.address[i].active_address){
    doc.address[i].active_address = null;
  }        
}
return doc;
于 2015-03-17T20:16:47.987 に答える