2012-12-28 60 views
1

我有一個模型(和它相應的集合),它有一個URL與一個額外的參數。例如,對於職位collection的URL會是這樣的:如何定義URL中具有附加參數的BackboneJS模型和集合?

/rest-api/posts/2/comments/ 

和特定註釋的URL會是這樣的:

/rest-api/posts/2/comments/3/ 

什麼來定義和實例化的意見的最佳模式收藏和模特?

目前,我正在做這個:

var Comment = Backbone.Model.extend({ 
    url: function() { 
     var base = '/rest-api/posts/' + this.get('post_id') + '/comments/'; 
     if (this.isNew()) { return base; } 
     return base + this.id + '/'; 
    }, 
    // ... 
}); 

var CommentsCollection = Backbone.Collection.extend({ 
    model: Comment, 
    url: function() { 
     return '/rest-api/posts/' + this.post_id + '/comments/'; 
    }, 
    initialize: function (options) { 
     this.post_id = options.post_id; 
    }, 
    // ... 
}); 

和實例這樣的集合:

CommentsList = new CommentsCollection({ post_id: current_post_id }); 

這是在Backbone.js的這樣的accepted模式?我正在向自己介紹這個新框架,我只是想以可讀和可維護的方式對其進行編碼。

+0

,使用收集屬性並解決問題,使用URL的是收集被猜到有時 – Deeptechtons

回答

0

你不應該需要在模型中定義url因爲骨幹就可以自動補齊ID的收藏網址:http://backbonejs.org/#Model-url

關於集URL,這是在我看來,讓URL的一個非常有效的方法。

或者,但增加了複雜性,你可以添加註釋集合作爲Post模型的屬性並初始化或在需要時獲取它。這樣,你可以,如果你願意的話,在收藏中添加parent財產,指的是爲獲得基本URL並追加/comments部分(即應避免更改,如果帖子的網址修改兩個地方的東西)。

的選擇,最終,依靠複雜的,你願意處理水平。

+0

感謝對模型的URL尖端這是絕對的罰款。但是,在這種情況下,我必須爲模型定義一個'url'方法。爲模型生成的URL的結果類似'/ rest-api/posts/2/comments/3',但服務器需要尾隨的'/'。不管怎樣,謝謝!關於將comments集合實例定義爲post模型的屬性,我一定會使用這個模式,對我來說很有意義。 –

相關問題