我正在尝试编写一些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();
}
如果我在这个“新的ContentView({model:this._items.at(0)})中放入0代替id”,我将获得该集合中的第一个项目,如果我在视图中执行此操作:
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();
}
});
答案 0 :(得分:2)
Backbone将一堆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字符串替换元素的内容。