在Backbone.Marionette的布局视图中使用UI和模型是否正确?

时间:2015-05-07 11:44:28

标签: backbone.js marionette

在Backbone.Marionette中,布局视图扩展了项目视图,因此它具有UI元素并可以处理模型。但是从语义上讲,将模型分配给布局视图并将UI元素绑定到它是否具有哲学上的正确性?或布局应该只有区域和模板?

2 个答案:

答案 0 :(得分:1)

TL; DR 我相信Marionette的理念是尽量减少语义。 Marionette.View中定义的方法选择由所有Marionette视图继承。虽然所有派生的Marionette观点在他们设计的内容方面都更好,但它们仍然是Marionette.View。

截至本文发布之日,我每天都在一个企业项目上使用Marionette超过一年。我努力在社区中保持活跃,并随时了解Marionette的发布。

根据我的经验,Marionette对如何构建和操纵视图提出了意见,但它有意识地试图保持其观点尽可能灵活和通用。也就是说,请看issue,其中@jmeas(一位主要的Marionette贡献者和有远见的人)设想将Marionette减少为LayoutViews和CollectionViews!

我认为您问题的最佳答案是,如果您认为该方法可以在本地使用,那么这不是一个意外。 Marionette View继承结构已经过严格测试。我还没有看到任何衍生视图中的方法与该视图的语义相矛盾。

更新我认为有必要指出在LayoutView模板中呈现模型存在潜在的主要警告

考虑这种情况。您有一个带有模型的LayoutView,以及至少一个区域。您还.show()在LayoutView的区域中的子视图。现在,LayoutView中的数据在不同的视图中更新,并且您希望动态更新LayoutView。如果再次 渲染 布局视图,那么整个视图将被丢弃,包括渲染的子视图,需要再次渲染子图。

在某些情况下,这可能会对性能产生重大影响。并且可能存在其他问题,具体取决于在LayoutView中最初处理子视图的方式。

答案 1 :(得分:0)

在布局视图中使用模型绝对是正确的。我可以想到它可能有用的各种用例:

  • 显示模型中存在的动态属性。
  • 将值从一个视图传递到另一个视图等等。
  • 倾听并回应其模型属性的变化。