backbone.js新手系列

时间:2011-12-28 23:49:17

标签: 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();
}

如果我在这个“新的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();
    }
});

1 个答案:

答案 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字符串替换元素的内容。