Backbone: Berikan model.set opsi parse

Dibuat pada 21 Jun 2013  ·  13Komentar  ·  Sumber: jashkenas/backbone

Rekan koleksi set memungkinkan Anda untuk memberikan opsi "parse" untuk menjalankan fungsi parser sebelum memproses objek koleksi. Ini berguna ketika Anda memiliki data bootstrap yang ingin Anda buat koleksinya, karena tidak akan melalui fungsi pengambilan.

Apakah ada alasan objek model tidak memberikan opsi yang sama untuk koleksi paralel? Tampaknya tidak konsisten bagi saya bahwa itu dihilangkan.

Sunting: Setelah pemeriksaan lebih lanjut, reset masih menghormati opsi parse.

duplicate

Komentar yang paling membantu

Saya sebenarnya menggunakan model.set(model.parse(data)) sekarang karena opsi parse tidak ada. Ini akan sangat bagus untuk memiliki konsistensi dengan collection.reset dll.

Semua 13 komentar

Saya akan tunduk pada @caseywebdev tentang kemampuan melakukan ini, tetapi saya pikir tentu masuk akal untuk memiliki paritas API antara model dan penguraian koleksi. Terima kasih telah membuka masalah @etler!

Implementasi harus cukup lurus ke depan. Saya pikir pertanyaan utamanya adalah apakah ada alasan untuk tidak melakukannya? Juga, apa yang akan terjadi ketika val kunci diberikan alih-alih objek atribut?

Kedengarannya bagus, tetapi kasus yang akan menyebabkan masalah di kepala saya adalah parse dengan defaults ( perhatikan urutan acara di sini ). Saya ingin melihat PR dengan pemikiran implementasi Anda.

Bagus, saya ingin menusuknya.

Saya sebenarnya akan membuka tiket untuk ini juga - tetapi kemudian menemukan #2013... meskipun saya berasumsi bahwa sebelum ada Collection#set .

Saya setuju dengan @wookiehangover bahwa paritas API akan menyenangkan untuk dimiliki, dan saya telah menemukan kasus di mana masuk akal ketika menggunakan parse untuk menangani data bersarang (saya baru saja menggunakan model.set(model.parse(data)) seperti yang disebutkan dalam tiket lainnya).

@tgriesser Saya tidak tahu bagaimana saya melewatkan masalah itu! Saya setuju dengan diskusi itu untuk kasus penggunaan itu, tetapi saya pikir kasus penggunaan yang lebih menarik adalah untuk mem-parsing data yang di-bootstrap (serta penguraian bersarang, yang juga saya lakukan). Saya juga telah menggunakan solusi yang sama, tetapi seperti yang Anda katakan, sekarang ada Collection#set , sekarang juga ada argumen paritas.

Apa kasus penggunaan sebenarnya untuk membutuhkan ini?

Jika Anda ingin memanggil set pada model yang sudah ada di mana objek memiliki data bersarang yang akan Anda tarik dari model parse . Saya menginginkan fungsi ini pada beberapa kesempatan.

class Book extends Models.Document
   constructor: ->
      <strong i="8">@info</strong> = new InfoModel()
      <strong i="9">@chapters</strong> = new ChaptersCollection()
      super

   parse: (attrs, options) ->
      @info.set(attrs.info, options)
      @chapters.set(attrs.chapters, options)
      _.omit(attrs, 'info', 'chapters')

Sekarang Anda dapat melakukan ini:

book.set({
  title: 'title',
  info: {
    some: data
    someNested: {
        otherData: ...
    }
  },
  chapters: [{...}, {...}]
}, {parse: true});

dan itu akan berfungsi... (ya, model.set(model.parse( berfungsi, tetapi lebih mudah untuk memiliki api yang sama untuk mengurai data bersarang dalam koleksi dan model)... meskipun dengan masalah #2623 itu hanya berfungsi sejauh ini turun.

Adakah yang punya pemikiran tentang bagaimana perubahan ini akan bekerja dengan default? Dan tanpa penguraian ganda?

Agar berfungsi dengan default, saya membuat options.defaults , yang ditetapkan dalam fungsi inisialisasi untuk diteruskan ke set , sehingga dapat diterapkan setelah langkah penguraian. Saya tidak tahu apakah itu keputusan desain yang kami inginkan, tetapi saya tidak dapat memikirkan solusi alternatif.

Mari kita pindahkan percakapan ini ke PR terbuka...

Apakah ada pembaruan tentang ini?

Saya sebenarnya menggunakan model.set(model.parse(data)) sekarang karena opsi parse tidak ada. Ini akan sangat bagus untuk memiliki konsistensi dengan collection.reset dll.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat