Bagaimana cara menambahkan hubungan atau referensi dengan AutoForm di Meteor?

Saya menggunakan meteor-autoform untuk memasukkan dokumen ke dalam koleksi. Items saya memiliki bidang groupId. Bagaimana saya bisa memasukkan id grup ini ketika saya mengirimkan formulir item saya.

<template name="itemForm">
  {{#autoForm type="insert" collection=Collections.Items}}
    {{> afQuickField name="name"}}
    <div class="form-group">
      <button type="submit" class="btn btn-primary">Add item</button>
      <button type="reset" class="btn btn-default">Reset Form</button>
    </div>
  {{/autoForm}}
</template>

Saya dapat membuat bidang lain yang berisi id grup saya tetapi saya tidak ingin pengguna melihat bidang ini.

Bagaimana cara mengatur groupId "di belakang layar"?


person Jamgreen    schedule 17.12.2014    source sumber
comment
di bidang Anda, Anda dapat menambahkan autoform: {omit: true} untuk menyembunyikan bidang di formulir   -  person Mustafa    schedule 28.03.2015


Jawaban (3)


Untuk itu, Anda memerlukan sebuah pengait. Anda juga perlu menyetel ID untuk formulir, katakanlah addItemForm.

//Anywhere in your client code
Autoform.hooks({
  addItemForm : {
    onSubmit : function(doc) {
      doc.groupId = /*Get the group id*/;
      this.done(); //We've finished
      return true; //Let autoForm do his default job now
    }
  }
});
person Kyll    schedule 17.12.2014
comment
Dingin. Bagaimana cara mendapatkan id grup? Saat ini saya mendapatkan id dengan this.params._id di dalam Router.route('/group/:_id', {}); - person Jamgreen; 17.12.2014
comment
Jika groupId Anda unik, Anda bisa meneruskannya dalam variabel global. Pilihan lainnya adalah mengaturnya di server... Atau, untuk memberikan kontrol yang lebih baik, Anda bisa menggunakan metode dengan formulir Anda. Lihat jenisnya di sini. - person Kyll; 17.12.2014

Saya pikir salah satu solusinya adalah dengan tidak menampilkan opsi ini kepada pengguna. Anda juga perlu menambahkan optional:true pada kolom tersebut, agar tetap valid saat Anda mengirimkan formulir.

Kemudian dengan menggunakan hook, Anda seharusnya bisa menambahkan data lain yang Anda inginkan

Dokumen tersedia kait di autoform

Saya biasanya memodifikasi dokumen di before insert

AutoForm.hooks({
  myFormId: {
    before: {
      insert: function(doc, template) {
        //modify the document here
      }
    }
})
person Nicolas Grenié    schedule 17.12.2014

Anda dapat menggunakan doc=this jika konteks data templat tersedia.

Misalnya:

<template name="itemForm">
  {{#autoForm id="insert-item-form" type="insert" collection=Collections.Items doc=this}}
    {{> afQuickField name="name"}}
    <div class="form-group">
      <button type="submit" class="btn btn-primary">Add item</button>
      <button type="reset" class="btn btn-default">Reset Form</button>
    </div>
  {{/autoForm}}
</template>

Konsekuensi lebih lanjut, Anda dapat menyiapkan hook yang akan dipicu sebelum operasi penyisipan:

var itemsHooks = {
    before: {
        insert: function (doc) {
            doc.groupId = this.currentDoc._id;
            return doc;
        }
    }
};

AutoForm.addHooks('insert-item-form', itemsHooks);
person Matthias A. Eckhart    schedule 08.10.2015