autoForm を使用して新しい入れ子/配列の値をコレクションに追加するのに問題があります。
質問を更新するためにクイックフォームを使用しようとしています。ユーザーがより多くの回答オプションを追加できるようにしたいと思います。私のスキーマは次のようになります (順序、いくつかのメタデータなどを省略して簡略化しています):
questionSchema = new SimpleSchema({
label: {
type: String
},
answers: {
type: Array,
minCount: 2,
maxCount: 6
},
"answers.$": {
type: Object
},
"answers.$._id": {
type: String,
regEx: SimpleSchema.RegEx.Id,
autoValue: function(){ return Random.id(); },
autoform: {
type: "hidden"
}
},
"answers.$.label": {
type: String,
regEx: /.{1,150}/,
autoform: {
label: false
}
},
"answers.$.count": {
type: Number,
defaultValue: 0,
autoform: {
type: "hidden"
}
}
});
以外に、quickForm を介して質問を追加しただけのときは、オプションanswers.$.label
を使用していませんでした。質問を編集したいときにこれらのオプションを追加しました。そうしないと、nullのままにしたという苦情がありました。だから私はそれらを非表示にしましたが、フォームに入れました。autoform
type='insert'
count
私の編集フォームは次のようになります。
{{> quickForm collection="Questions" id="editQuestionForm"
type="update" setArrayItems="true" doc=questionToEdit
fields="label, answers"}}
現在、質問のラベルと最初に追加した回答を更新できます。しかし、新しい回答オプションを追加できません。私がそれを行うと、count
オプションではないため拒否されます。しかし、私はdefaultValue
...を指定しました
ユーザーが変更できる場所にcount
s またはsを配置しないように、quickForm を次のようにしたいと思います。_id
{{> quickForm collection="Questions" id="editQuestionForm"
type="update" setArrayItems="true" doc=questionToEdit
fields="label, answers, answers.$.label"}}
answers.$._id
しかし、私の変更が正しい答えを更新することを確実にするために、そこにとどまって隠しておく必要があるかもしれませんか?
そう:
私の回答は、挿入時にデフォルトで 0 にカウントされます。回答を編集して追加しても、なぜそうならないのですか?
autoForm は update の代わりに upsert を実行できますか? 新しい質問を挿入したり、既存の質問ラベルを更新したり、必要に応じて または を使用し
defaultalue
たりautoValue
します。この種のメソッドを使用する必要がありますか?