将 Backbone 视图呈现为具有不同配置的多个元素

Rendering Backbone view into multiple elements with different configurations

我有一个包含 3 个 jquery-mobile 页面小部件的 html 页面。每个页面小部件都具有相同的 header,但子链接的配置略有不同。我想将 Header 创建为 BackboneView 并为每个页面小部件呈现它。每个页面小部件也有自己的视图。页面模板如下所示:

<body>

    <div id="news" data-role="page">
        <header class="header"></header>
    </div>

    <div id="updates" data-role="page">
        <header class="header"></header>
    </div>

    <div id="stuff" data-role="page">
        <header class="header"></header>
    </div>

</body>

第一页的视图(在本例中为新闻视图)首先呈现。此页面创建 header 视图的实例。使用 header.

时出现问题

1) 如何专门针对第一页“#news header”定位 header,同时保持足够的灵活性让我能够当我准备加载更新页面时,使用一组不同的参数再次调用它?

2) 当我准备加载更新页面时,它将有一组不同的配置需要定位“#updates header”。因此我不想在视图上硬编码 tagName。

3) 如何将第一个实例化的 header 传递给其余的视图?还是我认为这一切都是错误的,我是否应该扩展基本 Header 视图作为我的每个页面的模板,这些页面带有一组配置?

每个 header 之间唯一不同的是 class 名称,它将附加到渲染视图中的元素,以及它为页面创建的一些锚链接。为此,我正在尝试尽可能多地重用视图以减少占用空间。

注意:不确定这是否重要,但我使用的是 requirejs。由于 requirejs 将模块作为单例处理,也许有一种建议的方法来创建视图并在必要时始终重用它?

谢谢!

使用像 appView.js 这样的概述。它将负责渲染所有子视图。

在 appView 中(您需要在这个超级模块 HeaderView 中要求您的子视图):

initialize: function() {
    this.$news = $('#news');
    this.$updates = $('#updates');
    this.$stuff = $('#stuff');
},

render:function() {
    var newsView = new HeaderView(param1,param2);
    this.$news.append(newsView.render().el);
    // do the same for your other subviews
}

在您的子视图中(比方说 NewsView)

initialize:function(param1,param2) {
    this.viewclass= param1;
    //set the other things you need here
},

render: function() {
    this.$el.html("my content here..model/template/anything"));
    this.$el.attr('class',this.vewClass);
}

请记住,重点是概述创建新的 SubView 和调用 render()。我希望它有所帮助。

编辑:如果您正在等待一些数据加载特定的子视图,请使用承诺。如果你正在等待一个集合完成获取使用类似的东西

collection.fetch(function() {
    success:function(res,model) {
        new subView(model);
    }
}