将数据绑定到视图中 - 在创建视图时,将数据从父视图传递到子/孙视图或初始化/查询数据是否更好?

时间:2017-11-22 13:58:01

标签: javascript backbone.js binding frontend marionette

我正在开发Backbone / Marionette项目。该项目实现了一种在从服务器加载数据后在本地内存上缓存数据的方法。因此,可以在项目内随时随地访问数据。

这让我想知道在我的案例中填充数据的更好方法是什么:

const ChildView = marionette.View.extend({/*...*/});

const ParentView = marionette.View.extend({
  // ...
  onRender() {

    // 1: pass data to child view from parent view
    const childView = new ChildView({
      data: this.options.data,
    }));

    // 2: initialize data when creating new child view
    const childView = new ChildView({
      data: SomeModel.new({/* some properties */}),
    }));
  },
  // ...
});

new ParentView({
    data: SomeModel.new({/* some properties */}),
}).render();

两种方法都能正常工作。但是,项目视图结构相当深刻和复杂,所以我更喜欢第二种方式,因为第一种方法我需要经常上下来检查data是什么以及它来自何处。

您认为此方法是否存在任何问题?

1 个答案:

答案 0 :(得分:1)

我更喜欢第一种方式,将数据从父级传递给子级,但这取决于您的观点在做什么。

对我来说,共享数据对象的一大优势是在一个视图中更新它会在所有其他视图中更新它(如果您传递现有的主干模型或任何对象data,这将有效)。这可以节省大量工作......当用户更新其背景颜色时(例如),您可以在BackgroundColorChoose视图中将其更新一次,并且知道它已经更新其他任何地方都在使用数据。

从某种意义上说,数据来自何处,只有它所代​​表的内容并不重要(因为它可以在任何视图中访问/修改)。

我可以想象这种方法不好的情况,但我发现它是一个良好的基线开始(并避免需要信任浏览器缓存)