Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何在不创建额外元素的情况下将主干.木偶视图附加到现有元素_Backbone.js_Marionette_Backbone Views - Fatal编程技术网

Backbone.js 如何在不创建额外元素的情况下将主干.木偶视图附加到现有元素

Backbone.js 如何在不创建额外元素的情况下将主干.木偶视图附加到现有元素,backbone.js,marionette,backbone-views,Backbone.js,Marionette,Backbone Views,假设我有两个脊梁。木偶视图: var FooView = Backbone.Marionette.ItemView.extend({ tagName: p, id: 'foo', template: this.templates.summary }); var BarView = Backbone.Marionette.ItemView.extend({ template: this.templates.summary }); 然后我想在应用程序区域内显示它们,如下所示: A

假设我有两个脊梁。木偶视图:

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());

第一个视图将创建一个新的元素并将其附加到区域。我原以为第二种方法更像是标准主干视图,在不创建新元素的情况下将自身连接到区域,但它将其包装在标记中。如果不使用setElement()之类的工具,有没有办法避免这种情况?

为此,您应该使用
attachView
方法:

谢谢。我见过这种方法,但不确定为什么要附加视图而不显示它(实际上,这是一个很好的子问题-有人能给出一个用例吗?)。我玩了一点,很沮丧,因为我无法让它工作,直到我意识到你必须在连接它后显示视图。下面是一个JSFIDLE来演示它——通常,您将向已经显示的HTML附加一个视图(即,您正在使用javascript行为增强现有元素)。你可以在我的一个老教程中看到一个例子:Derick在这里也有一篇关于渐进增强的有趣文章,讨论了相同的概念。如果我通常使用我的控制器实例化视图并调用区域上的show()来显示这些视图,那么让控制器也执行attachView是否合适?如果是这样,如果需要在应用程序启动时发生,那么什么时候会发生?是的,在视图启动时会发生。基本上,任何时候已经存在HTML(例如,由服务器呈现),都需要使用
attachView
,以避免主干重新呈现视图时出现“闪烁”。您也可以只使用
show
,但视图将为空(即看起来像一个flash),因为服务器端HTML将被清空,并通过主干重新呈现。@DavidSulc好的,这是有道理的,但如果我尝试附加CollectionView实例,它看起来并不那么简单。每个项目视图最终如何正确附着到该集合视图的各个部分?我是否需要覆盖某些内容才能正常工作?