簡體   English   中英

骨干獲取不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM