Backbone: model.setに解析オプションを与える

作成日 2013年06月21日  ·  13コメント  ·  ソース: jashkenas/backbone

setのコレクションの対応物を使用すると、コレクションオブジェクトを処理する前にパーサー関数を実行するための「解析」オプションを提供できます。 これは、コレクションを構築するブートストラップデータがある場合に便利です。これは、フェッチ関数を経由しないためです。

モデルオブジェクトが並列収集に同じオプションを提供しない理由はありますか? それが省略されていることは私には矛盾しているようです。

編集:さらに詳しく調べてみると、リセットは引き続き解析オプションを尊重します。

duplicate

最も参考になるコメント

解析オプションがないため、現在実際にmodel.set(model.parse(data))を使用しています。 これは、collection.resetなどとの一貫性を保つために非常に便利です。

全てのコメント13件

これの実行可能性については@caseywebdevに任せますが、モデルとコレクションの解析の間にAPIパリティを設定することは確かに合理的だと思います。 @etlerで問題を開いてくれてありがとう!

実装は非常に簡単です。 大きな問題は、そうしない理由があるかどうかだと思います。 また、属性オブジェクトの代わりにキーvalが提供された場合はどうなりますか?

これは良さそうに聞こえますが、頭のてっぺんに引っ掛かりが生じるのはparsedefaultsここでイベントの順序に注意してください)。 私はあなたの実装の考えでPRを見たいです。

素晴らしい、私はそれを突き刺したいです。

私は実際にこれについてもチケットを開くつもりでしたが、その後#2013に出くわしました...それはCollection#setが出る前だったと思いますが。

私は@wookiehangoverに同意します。APIパリティがあればいいのですが、解析を使用してネストされたデータを処理するときに意味がある場合があります(前述のようにmodel.set(model.parse(data))を使用しています。他のチケット)。

@tgriesserどうやってその問題を見逃したのかわかりません! そのユースケースについてのその議論に同意しますが、より説得力のあるユースケースは、ブートストラップされたデータの解析(および私が行っているネストされた解析)であると思います。 私も同じ回避策を使用していますが、あなたが言ったように、 Collection#setがあるので、パリティ引数もあります。

これを必要とする実際のユースケースは何ですか?

オブジェクトにネストされたデータがある既存のモデルでsetを呼び出したい場合は、 parseモデルをプルします。 私は何度かこの機能が欲しかった。

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')

今、あなたはこれを行うことができます:

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

そしてそれは機能するはずです...(はい、 model.set(model.parse(機能しますが、コレクションとモデルのネストされたデータを解析するために同じAPIを使用する方が簡単です)...#2623の問題では、これまでのところしか機能しません下。

この変更がデフォルトでどのように機能するかについて誰かが考えていますか? そして、二重解析なしで?

デフォルト設定で動作するようにそれを得るために、私が作成したoptions.defaultsに渡す初期化関数で割り当てられたが、 set彼らは構文解析ステップの後に適用することもできるので、。 それが私たちが望む設計上の決定であるかどうかはわかりませんが、別の解決策を考えることはできませんでした。

この会話をオープンPRに移しましょう...

これに関する更新はありますか?

解析オプションがないため、現在実際にmodel.set(model.parse(data))を使用しています。 これは、collection.resetなどとの一貫性を保つために非常に便利です。

このページは役に立ちましたか?
0 / 5 - 0 評価