0

ネストされたピザのコレクションを持つ PizzaType モデルがあります。ピザ コレクションは、ピザ タイプに基づいて一覧表示されます。ピザ コレクション内のピザをクリックして、その属性を表示できるようにしたいと考えています。

URL パラメータを動的に設定する最良の方法は何でしょうか? URL には、特定のリソースを取得するためだけに、ブックマークや共有のために移動するルートは必要ありません。

誰かがピザの種類を表示したい場合、URLは次のようになりますpizza_type/:id :idはピザの種類(親モデル)に属するIDです

私は現在それを持っているので、ピザ コレクション (ピザ タイプ モデルに属する) でピザをクリックすると、ピザ リソースへのパスはたどられません。ページ上のリージョンのみが更新されます。jQuery がリソースを取得してそのリージョンを更新できるようにするには、URL パスが必要です。ピザへの URL はpizza_types/:pizza_type_id/pizzas/:idここにあり:idます。 はピザ モデルに属する ID であり、 はピザ:pizza_type_idコレクションのメンバーが共有してピザ タイプ モデルに属するコレクションにグループ化する外部キーです。

ピザ (id = 3) をクリックすると、"NetworkError: 404 Not Found - http://localhost:3000/pizza_types/3/pizzas"

モデルとコレクション コードは次のとおりです。

@Pizzeria.module "Entities", (Entities, App, Backbone, Marionette, $, _) ->

  class Entities.PizzaType extends Backbone.Model
    urlRoot: "pizza_types/"

    # creates the nested collection
    initialize: ->
      @pizzas = new Entities.PizzasCollection
      @pizzas.url = @urlRoot + @id + '/pizzas'
      @pizzas.fetch
        reset: true

    parse: (response) ->
      response

  class Entities.PizzaTypesCollection extends Backbone.Collection
    model: Entities.PizzaType
    url: 'pizza_types'
    parse: (response) ->
      response

  # Is there a way to pass in a :pizza_type_id and :id params to pass to the url() so
  # that the specific pizza model can be retrieved from the collection?
  class Entities.Pizza extends Backbone.Model
    url: -> "pizza_types/" + 2 + "/pizzas/" + 4 # <-- Hard coded works, but how to set the params dynamically?

    parse: (data) ->
      data

  class Entities.PizzasCollection extends Backbone.Collection
    model: Entities.Pizza
    url: 'pizzas'
    parse: (data) ->
      data

助言がありますか?これは適切な方法ですか、私もこれをやろうとしました:

class Entities.Pizza extends Backbone.Model
        urlRoot: -> "pizza_types"

        # I thought I could pass these params in and fetch the correct pizza model, but not working.
        fetch
          pizza_type_id: pizza_type_id
          id: id
          reset: true

        parse: (data) ->
          data

サンプル データを含む PizzaType 属性:

  PizzaType: {
     id: 2,
     name: "Gourmet",
     pizzas: [
      0: {
           id: 4,
           pizza_type_id: 2
           name: "gourmet pizza 1"
         },
      1: {
           id: 5,
           pizza_type_id: 2,
           name: "gourmet pizza 2"
         }
     ]
4

1 に答える 1