2011-12-28 39 views
0

我想寫一些backbone.js的東西,以更好地瞭解在哪裏,如果它適合我​​更好的項目。任何方式我有一個網站,我正在加載與頁面內容的集合。backbone.js新手收藏

JSON數據回來與我的路由器(PID,姓名,標題,內容),默認爲

defaultRoute: function (actions) 
{ 
    this.showInfo('food'); 
}, 
showInfo: function (id) 
{ 
    var view = new ContentView({ model: this._items.at(id) }); 
    $(".active").removeClass("active"); 
    $("#" + id).addClass("active"); 
    view.render(); 
} 

如果我把一個0到位的ID在這個「新內容查看({模式:此._items.at(0)})」我會得到的第一個項目集合中,如果我這樣做的視圖:

var ContentView = Backbone.View.extend({ 
    el: $('#content'), 

    render: function() 
    { 
     this.el.empty(); 
     $(this.el).append(this.model.attributes.content); 
     return this; 
    } 
}); 

我得到的內容顯示完美,但當然也可能不是我的內容想要

是嗎?可能從基於名稱==「食物」的集合中選擇?我不希望有映射內容ID號擊敗在DB存儲的目的

很抱歉,如果這似乎是一個愚蠢的問題,但我已經爬遍前瞻性和我敢肯定,我在想念着一些簡單的

這裏是我的全部NavigationRouter代碼的情況下,它可以幫助

var NavigationRouter = Backbone.Router.extend({ 
    _data: null, 
    _items: null, 
    _view: null, 

    routes: { 
     "p/:id": "showInfo", 
     "*actions": "defaultRoute" 
    }, 
    initialize: function (options) 
    { 
     var _this = this; 
     $.ajax({ 
      url: "page_data.php", 
      dataType: 'json', 
      data: {}, 
      async: false, 
      success: function (data) 
      { 
       _this._data = data; 
       _this._items = new ItemCollection(data); 
       _this._view.render(); 
       Backbone.history.loadUrl(); 
      } 

     }); 

     return this; 
    }, 
    defaultRoute: function (actions) 
    { 
     this.showInfo('home'); 
    }, 
    showInfo: function (id) 
    { 
     var view = new ContentView({ model: this._items.at(id) }); 
     $(".active").removeClass("active"); 
     $("#l_" + id).parent().addClass("active"); 
     view.render(); 
    } 
}); 

回答

2

骨幹在一堆Underscore's功能集成到其Collections混合。

所以,如果你想找到集合中的模型,其中name === 'food',你可以這樣做:

var foodModel = this._items.find(function(model) { 
    return model.get('name') === 'food'; 
}); 
// this will set foodModel to the first model whose name is 'food' 

作爲一個側面說明,你並不需要調用empty在渲染功能,可剛是:

render: function() { 
    $(this.el).html(this.model.get('content')); 
    return this; 
} 

jQuery的html功能只是取代你在通過HTML字符串元素的含量

+0

所以我必須創建一個。新var var homeModel等每個頁面我要在內部路由顯示信息,因爲this._items將在NavigationRouter之外未定義 – Ehask 2011-12-29 00:40:23

+0

您不是使用下劃線的'find'函數創建新模型。您只需在'this._items'中找到已存在的模型並保存對其的引用即可。然後你可以做它的東西,把它傳遞給現有的視圖,傳遞給新的視圖,無論如何。 – satchmorun 2011-12-29 00:43:58

+0

明白了!謝謝!! – Ehask 2011-12-29 00:51:06