[英]Backbone fetch doesn't work
我在嘗試獲取Backbone Colection方面有些困惑,我是Backbone的新手,並且我確定我錯過了一些簡單的事情,但是不知道是什么。
有什么想法嗎?
$ ->
User = Backbone.Model.extend(
urlRoot: "/users"
)
user = new User()
View = Backbone.View.extend(
tagName: "li"
el: "ul"
id: "#users"
template: _.template("<li>...just a code...<span class='buttons'><button class='info'>Info</button><button class='delete'>Delete</button></span></li>")
render: ->
@$el.html(@template())
)
view = new View(
model: user
)
view.render().el
Users = Backbone.Collection.extend(
model: User
url: "/users"
parse: (resp, xhr) ->
return resp.toJSON()
)
usersCollection = new Users()
usersCollection.fetch(
success: (response) ->
console.log 'success'
console.log usersCollection
console.log response
error: (data, response) ->
console.log(response)
)
我的“ / users /”返回此數組:
[{"created_at":"2013-05-25T18:00:43Z","email":"user1@mail.ru","id":1,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user2@mail.ru","id":2,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user3@mail.ru","id":3,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user4@mail.ru","id":4,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user5@mail.ru","id":5,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user6@mail.ru","id":6,"updated_at":"2013-05-25T18:00:43Z"},{"created_at":"2013-05-25T18:00:43Z","email":"user7@mail.ru","id":7,"updated_at":"2013-05-25T18:00:43Z"}]
控制器(Ruby on Rails)如下所示:
def index
users = User.all
render json: users, status: 200
end
在console.log中,我有:
success
child {length: 1, models: Array[1], _byId: Object, constructor: function, model: function…}
嘗試在您的View定義中添加一個initialize屬性,然后使用“ listenTo”將事件綁定到該對象,以進行集合重置(例如):
View = Backbone.View.extend(
tagName: "li"
el: "ul"
initialize: function(){
this.collection = new app.YourCollection();
this.collection.fetch({ reset: true });
this.listenTo(this.collection, 'reset', this.render);
},
然后在render屬性上(在這種情況下為方法):
render: function(){
this.collection.each(function(item){
this.renderWeeklyMenu(item);
}, this);
},
renderItem: function(item){
var itemView = new app.itemView({
model : item
});
this.$el.append(itemView.render().el);
}
而且“獲取”返回JSON數據,因此您不需要:
parse: (resp, xhr) ->
return resp.toJSON()
)
希望這可以幫助。
刪除parse
函數,因為您的響應是主干默認期望的格式。 它將正確解析JSON並將數組視為數據對象的集合,這些數據對象將轉換為模型實例。
因此,您的提取工作正常,但是您不正確A)在視圖中包含集合或模型中的任何數據(這樣您就不容易看到它是否在工作,並且B)在加載數據后用數據重新渲染視圖綁定到集合的sync
事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.