【问题标题】:How to attach Backbone.Marionette view to existing element without creating extra element如何在不创建额外元素的情况下将 Backbone.Marionette 视图附加到现有元素
【发布时间】:2013-08-08 02:40:58
【问题描述】:

假设我有这两个 Backbone.Marionette 视图:

var FooView = Backbone.Marionette.ItemView.extend({
  tagName: p,
  id: 'foo',
  template: this.templates.summary
});

var BarView = Backbone.Marionette.ItemView.extend({
  template: this.templates.summary
});

然后我想在应用区域内显示它们,如下所示:

App.contentRegion.show(new FooView/BarView());

第一个视图会创建一个新的

元素并将其附加到区域。我认为第二种方式更像是标准的 Backbone 视图,并将其自身附加到区域而不创建新元素,但它将其包装在标签中。有没有办法在不使用 setElement() 之类的东西的情况下避免这种情况?

【问题讨论】:

    标签: backbone.js marionette backbone-views


    【解决方案1】:

    【讨论】:

    • 谢谢。我见过这种方法,但不确定为什么要附加视图而不显示它(实际上,这是一个很好的子问题 - 有人可以给出用例吗?)。我玩了一下它并且很沮丧,因为我无法让它工作,直到我意识到你必须在附加它之后显示视图。这是一个演示它的 jsFiddle - jsfiddle.net/tonicboy/q8Le4
    • 通常,您会将视图附加到已显示的 HTML 中(即,您正在使用 javascript 行为增强现有元素)。你可以在我的一个旧教程中看到一个例子:davidsulc.com/blog/2012/05/06/… Derick 还有一篇关于渐进增强的有趣文章lostechies.com/derickbailey/2011/09/26/… 谈论相同的概念。
    • 如果我通常使用我的控制器来实例化视图并在区域上调用 show() 以显示这些视图,那么是否希望控制器也执行 attachView?如果是这样,如果它需要在应用程序启动时发生,什么时候会发生?
    • 是的,它会在视图启动时发生。基本上,任何时候您已经存在 HTML(例如由服务器渲染),您需要使用 attachView 在 Backbone 重新渲染视图时避免“闪烁”。您也可以只使用show,但视图将是空白的(即看起来像一个闪光),因为服务器端的 HTML 将被 Backbone 清空并重新呈现。
    • @DavidSulc 好的,这是有道理的,但如果我试图附加一个 CollectionView 实例,它似乎并不那么简单。每个项目视图如何最终正确地附加到该集合视图的各个部分?我是否需要覆盖某些内容才能使其正常工作?
    猜你喜欢
    • 2021-12-26
    • 2017-11-06
    • 2012-04-27
    • 2018-02-08
    • 2012-10-05
    • 2012-12-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多