0

我有以下看法:

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> 

问候罗杰

4

2 回答 2

1

骨干需要周围的元素才能工作。它本质上是您的视图所在的容器/占位符,无论其内容是否已呈现。

如果您真的坚持没有容器,那么我会考虑采用以下方法:

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元素将指向什么?)

于 2013-08-26T23:50:20.940 回答
1

为了扩展斯科特的答案,尝试强制删除周围的视图标签可能是一个非常糟糕的主意。

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

  • 让 Backbone 将您的视图放入默认div元素中
  • 使用elortagName属性指定你希望 Backbone 用哪个元素来包裹你的视图

如果“额外”标签产生了问题(例如,您需要生成特定的 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()
})

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

于 2013-08-27T07:19:52.727 回答