2012-11-20 68 views
0

在我的應用程序的初始化函數期間,我想默認搜索頁面並將我的LeagueCollection作爲模型傳遞。傳遞模型從本地存儲查看的問題

我遇到了一個問題,我可以添加手錶到this.searchResults在我的應用程序初始化,並看到模型:數組[3]如預期, 但當視圖中調用this.model.toJSON()我得到的錯誤對象沒有方法toJSON。

此代碼在內存集合中工作正常,然後我切換到使用backbone.localstorage.js在本地存儲應用程序數據。

所以我的問題是:爲什麼模型沒有填充在視圖中?

在我main.js我有

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "": "list", 
    ... 
    }, 
    initialize: function() { 

     this.searchResults = new LeagueCollection(); 
     this.searchPage = new SearchPage({ 
      model: this.searchResults.fetch() 
     }); 
     this.searchPage.render(); 

    }, 
    ... 
}); 

在我的搜索頁面視圖

window.SearchPage = Backbone.View.extend({ 

    initialize:function() { 
     this.template = _.template(tpl.get('search-page')); 
    }, 

    render:function (eventName) { 
     var self = this; 

     $(this.el).html(this.template(this.model.toJSON())); 
     this.listView = new LeagueListView({el: $('ul', this.el), model: this.model}); 
     this.listView.render(); 

     return this; 
    }, 
    ... 
}); 
+1

你要收集或內部'SearchPage'的模型,如果你想有一個集合,你應該把它叫做'collection'而不是'model'。 –

+0

對不對 - 術語不正確 - 我的意思是模型 –

+0

但是,如果它是一個集合,你應該稱之爲「集合」,否則你只會混淆每個人。視圖構造函數特別像'model'參數那樣處理'collection'屬性:http://backbonejs.org/#View-constructor –

回答

3

collection.fetch不返回集合的方法 - 它是異步的。你可能需要的是使用它的success回調:

this.searchResults = new LeagueCollection(); 

var self = this; 
this.searchResults.fetch({ 
    success: function(collection, response) { 
     self.searchPage = new SearchPage({ model: collection }); 
     self.searchPage.render(); 
    } 
}); 
+1

很好,謝謝!我會去看看文檔。 –