2013-09-27 153 views
0

我有PizzaType模型,它有一個比薩餅的嵌套集合。比薩餅系列是根據比薩類型列出的。我希望能夠點擊比薩餅集合中的披薩並顯示其屬性。Backbone.js如何檢索嵌套集合中的模型?

什麼是動態設置url params的最佳方式? 該網址不需要路徑來導航到書籤和共享,只是爲了檢索特定的資源。

我有它,這樣如果有人想要觀賞比薩鍵入URL是pizza_type/:id :身份證是屬於比薩型我現在有它,所以如果一個比薩餅點擊ID(父模型)

在比薩餅集合(屬於比薩類型模型)中,沒有遵循比薩資源的路徑;只是頁面上的一個區域被更新。 url路徑是必需的,所以jQuery可以獲取資源來更新該區域。比薩餅的網址是pizza_types/:pizza_type_id/pizzas/: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" 
     } 
    ] 

回答

0

對於比薩餅模型的網址,你可以指定一個像pizza_type爲模型的屬性在初始化函數和變更網址的功能類似這樣的

class Entities.Pizza extends Backbone.Model 
    initialize: (options)-> 
     @pizza_type = options.pizza_type if options.pizza_type 

    url: -> 
     "pizza_types/" + @pizza_type + "/pizzas/" + @id 

    parse: (data) -> 
     data 

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

    url: -> 
    @[email protected]+'/pizzas' if @id 

    initialize: -> 
    @pizzas = new Entities.PizzasCollection 
    @pizzas.fetch reset: true 

    parse: (response) -> response 

PizzasCollection添加addOptions所以加入模型時,對col經文然後骨幹與此默認選項

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

"NetworkError: 404 Not Found - http://localhost:3000/pizza_types/3/pizzas"

這是你的服務器有問題,也許是打錯,或尾隨斜槓的問題或任何服務器的問題補充。

P.S:我建議使用關係模型(帶任何插件,可以這樣做BackboneRelationals

+0

感謝您的提示。我將在9/29/13的星期天訪問我的電腦時嘗試此操作。當我嘗試時,我會給你信用。謝謝。 –