代码之家  ›  专栏  ›  技术社区  ›  rogergl

去除Backbone中的周围元素。Marionette

  •  0
  • rogergl  · 技术社区  · 11 年前

    我有以下观点:

    return  Marionette.ItemView.extend({
    
            el: '<section>',
    
            template: JST['app/scripts/templates/grid.ejs'],
    

    这被称为:

    // a Layout
    regions: {
            grid: '#grid',
            detail: '#detail'
        },
    
        onShow: function () {
    
            var detailModel = new DetailModel();
    
            var g = new GridView(detailModel);
    
            this.grid.show(g);
        }
    

    问题是:如何去除周围的截面元素?我试图省略el属性,但这给了我以下看起来奇怪的div:

    <div productname> 
    

    问候罗杰

    2 回复  |  直到 11 年前
        1
  •  1
  •   Scott    11 年前

    周围的元素是骨干工作所必需的。它本质上是视图所在的容器/占位符,无论其内容是否已渲染。

    如果你 真正地 坚持不要集装箱,那么我会考虑采取以下措施:

    https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.region.md#set-how-views-el-is-attached

    Marionette.Region.prototype.open = function(view){
      this.$el.empty().append(view.$el.children());
    }
    

    我之所以说“诉诸”,是因为在我看来,Backbone不应该这样使用,而且可能会产生副作用。(我不太确定当该区域的视图试图重新渲染时会发生什么;会是什么 el 元素指向?)

        2
  •  1
  •   David Sulc    11 年前

    为了扩展Scott的回答,试图强制删除代理视图标记可能是一个非常糟糕的主意。

    所有主干视图都包含在一个DOM元素中。鉴于这一事实,您有两个主要选项:

    • 让Backbone将您的视图设置为默认视图 div 要素
    • 使用 el tagName 属性

    如果“额外”标签造成了问题(例如,您需要生成一个特定的HTML集来与插件一起使用),那么您就没有正确定义包装元素。有关这个主题的更多信息,请看我的这篇博客文章: http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/

    基于jsFiddle进行编辑:您奇怪行为的原因是您将一个模型实例传递给 initialize 作用然后将其解释为视图的属性,并设置为HTML属性。

    向视图提供模型实例的正确方法是:

    new App.FooterView({
        model: new App.Model()
    })
    

    换句话说,您为视图提供了一个javascript对象 model 所有物如果你想快速学习木偶基础知识,请查看我的书的免费预览: http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf (您将在第15-21页找到如何用模型实例化视图)