【问题标题】:What is the recommended way(s) to keep track of View state information?跟踪视图状态信息的推荐方法是什么?
【发布时间】:2015-09-08 14:29:02
【问题描述】:

我在阅读有关 Backbone 的文章时发现的共识似乎是:不要在视图中存储东西,将其存储在模型中,然后让视图监听模型的变化。

如果我们谈论的是我们已经有了明显的模型-视图配对的情况,那就太好了。例如,您有一个 User 模型和一个 UserView 视图。显然,您在视图上设置了一个模型属性,它会监听其模型的变化。

但是,假设我有一个显示内容列表的视图,并且有几个按钮可以在“列表视图”和“网格视图”之间切换。这是我在应用程序和网站中看到的一个非常常见的约定。我想要“列表视图”还是“网格视图”与模型/集合本身并不相关;它似乎对视图本身非常具体。

起初我只是尝试使用与模型完全一样的视图:设置属性、绑定事件'change:propertyName',然后使用someView.set('propertyName') 等进行更新……但这不起作用。

在考虑如何解决这个问题时,我想我记得以前看到过这样的事情:

var MyView = Backbone.View.extend({
    ...
    model: Backbone.Model(),
    ...
});

因此,与拥有一个 UserModel 不同。我们只是有一些“无类型”模型。或者我想,我实际上可以创建一个新类,可能只是为此而称为MyViewModel...虽然我看不出有这样做的理由。

这使我可以像我想要的那样绑定到更改事件并使用someView.model.set(...) 设置视图数据。

所以我的问题是:这是人们在 Backbone 中为视图状态所做的常见事情吗?或者,还有更好的方法?谢谢。

【问题讨论】:

    标签: javascript backbone.js model-view-controller mvvm underscore.js


    【解决方案1】:

    您希望在用户访问页面时使用所选的显示样式(列表与网格)吗?如果是这样,最简单的解决方案可能是将该状态存储在 localStorage 中,并让视图类直接访问它。

    如果您不需要记住当前的显示样式,那么也许您根本不需要存储状态。单击按钮时更改样式。页面刷新后恢复默认。

    如果您的应用有使用帐户登录的用户,并且您希望他们的选择在他们可能使用的所有设备上保持不变,您需要有类似 UserModel 的东西(其中包含登录用户的信息和偏好) 记录他们的选择并将其保存到服务器。你的视图可以监听这个模型的变化。

    Backbone(对我而言)的美妙之处在于没有一种正确的方法来做某事。这些想法只是处理它的一些方法。

    您还可以在集合上拥有displayStyle 属性。我从可排序表中得到这个想法:在这种情况下,排序元数据是集合对象的一部分。当您通过选择列标题来重新排序表时,您更改集合的comparator 并重新排序。视图将监听“排序”事件并在它发生时重新渲染。您可以对显示样式执行类似的操作(您可以通过在集合中执行 this.trigger('display-style') 并让视图侦听该事件来创建自己的事件)。

    最后,无论您决定管理该状态,您都应该考虑这应该是一个视图类还是多个视图类。我认为这在很大程度上取决于您的应用程序的复杂性。在许多情况下,最好使用ProductListViewProductGridView,而不是具有两种显示样式的单个ProductView。将来将它们拆分为单独的视图甚至可能更容易添加其他样式(ProductImageView,也许?)。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2014-05-09
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多