【问题标题】:MarionetteJS: Application Regions vs. Layouts [duplicate]MarionetteJS:应用程序区域与布局 [重复]
【发布时间】:2015-01-06 21:41:36
【问题描述】:

我正在阅读最新版本 (2.3.0) 的文档,上面说应用程序区域现已弃用。

应用区域

警告:已弃用 此功能已弃用。而不是使用 应用程序作为视图树的根,您应该使用 Layout 看法。要将您的 Layout View 范围限定为整个文档,您可以设置 它的el到'身体'。这可能类似于以下内容: var RootView = Marionette.LayoutView.extend({ el: 'body' });

在大多数教程中,包括 David Sulc 的书 Backbone Marionette: A Gentle Introduction,它使用以下代码 sn-p 向应用程序添加区域。

下面的示例使用 addRegions,我应该怎么做?

var ContactManager = new Marionette.Application({});
ContactManager.addRegions({
    mainRegion: "#main-region"
});

var ContactView = Marionette.ItemView.extend({
    template: "#whatever",
    ui: {
        button: ".button".
    },
    events: {
        "click @ui.button": "click",
    },
    click: function () {
        console.log("do stuff here...");
    }
});

ContactManager.on("start", function () {
    var contactView = new ContactView({
        model: someModel
    });
    ContactManager.mainRegion.show(contactView);
});

【问题讨论】:

    标签: backbone.js marionette backbone-views


    【解决方案1】:

    改用布局视图。

    你可以这样做:

    var ContactManager = new Marionette.Application({});
    var LayoutView = Backbone.Marionette.LayoutView.extend({
      template: "#layout-view-template",
    
      regions: {
        menu: "#menu",
        content: "#content"
      }
    });
    
    ContactManager.layout_view = new LayoutView(); 
    ContactManager.layout_view.render(); 
    

    我从来没有直接将区域添加到我的应用程序对象中。

    【讨论】:

    • 可以在调用 app.start() 之前渲染布局视图还是必须在 onStart 处理程序中调用它?
    • 渲染布局视图是同步的,因此您只需要确保布局已渲染,然后才能在其区域中显示视图。除此之外,你可以在你喜欢的时候做。另请注意,如果您想创建区域以动态显示视图,则可以根据 DOM 中已有的元素定义区域。
    • 实际上,你怎么知道将渲染视图附加到 DOM 上?假设我有一个包含 #menu 和 #content 元素的模板,但我如何将这个渲染的布局视图实际附加到 html?
    • @Abe 你需要在布局上定义一个el属性,然后渲染它。
    • 谢谢,成功了
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多