ネストされたピザのコレクションを持つ 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"
}
]