2012-10-09 121 views
0

我遇到的情況是,我的抓取工作正常,我可以看到我的骨幹集合中的數據,如果我步入方法,我從中分配項目收集到模型var或暫停一秒鐘或兩秒鐘,一切都很好:代碼行this.member得到填充骨幹模型變量只在我進入方法時填充

this.member = this.members.get(1); 

。如果我只是讓代碼運行,那麼我認爲通過一個空模型傳遞給我的觀點。我不明白我錯過了什麼。在訪問集合之前,是否需要綁定集合中的數據?我想在愛上骨幹,但到目前爲止,她一直一個殘酷的情婦......

`

//create the namespace 
var Endeavor = { 
    Models: {}, 
    Collections: {}, 
    Views: {}, 
    Templates: {} 
}; 

Endeavor.Models.Member = Backbone.Model.extend({ 
    idAttribute: "Id" 
}); 

Endeavor.Collections.Members = Backbone.Collection.extend({ 
    model: Endeavor.Models.Member, 
    url: "Http://localhost:60000/api/members/" + "1", // $.cookie('UserId') 
    initialize: function() { 
     console.log("Members collections init"); 
    } 
}); 



Endeavor.Views.MemberView = Backbone.View.extend({ 
    id: "memberForm", 
    template: "#memberTemplate", 
    initialize: function() { 
     console.log('init member view'); 
    }, 
    render: function() { 
     console.log('memberView render called'); 
     console.log(this.model.toJSON()); 
     var html = $(this.template).tmpl(); 
     $(this.el).html(html); 
     $("#Name").text = this.model.Name; 
    } 
}); 

jQuery(document).ready(function() { 
    // router 
    Endeavor.Router = Backbone.Router.extend({ 
     routes: { 
      "": "lists", 
     }, 

     lists: function() { 
      this.members = new Endeavor.Collections.Members(); 
      this.members.fetch(); 

      this.member = this.members.get(1); 

      var memberView = new Endeavor.Views.MemberView({ model: this.member }); 
      memberView.render(); 
      $("#content").html(memberView.el); 
     } 
    }); 
    // populate local variables 
    var appRouter = new Endeavor.Router(); 
    Backbone.history.start(); 
}); 

`。

回答

2

Members.fetch是異步調用。嘗試render查看membersreset事件,或者通過success回調fetch方法,或者撥打this.members.fetch({async: false})。有很多不同的選擇。

+1

+1:打我吧。 – JayC

+0

謝謝你們兩位!我很欣賞這一點。 –

+0

儘管要跟進並幫助其他人,還有更好的方法來執行此操作嗎?例如,上面我提取數據的函數只是幾個提取中的一個,爲了使代碼更易於閱讀,我將其移除。等待異步調用完成後效率會更高嗎?那個函數會是什麼樣子? –