【问题标题】:Firebase + AngularFire -> States?Firebase + AngularFire -> 状态?
【发布时间】:2014-02-14 10:02:22
【问题描述】:

我想知道如何在 FireBase 环境中处理对象状态

状态是什么意思?好吧,假设您有一个应用程序,您可以使用它来组织订单列表。每个列表由一堆订单组成,因此可以认为它是一个分层数据结构。此外,每个列表都有一个状态,它可能是以下之一:

  • 推迟
  • 打开
  • 关闭
  • 已发送
  • 已确认
  • 商品已完全收到
  • 商品部分收到
  • 别的东西

在视觉 (HTML) 方面,列表应通过它们的状态来区分。每个状态都应以自己的方式呈现给客户端,例如,div-元素,列出下面的所有相关订单。

所以问题是,我如何在 FireBase(或任何其他基于文档的数据库)中处理这个状态

结构

我...

...(选项 1)为每个订单列表使用一个 state-字段,并使用 if 或类似的东西在客户端进行过滤:

  • orderlist1.state = 打开
    • 订单1
    • 订单2
  • orderlist2.state = 打开
    • 订单1
  • orderlist3.state = 关闭
  • orderlist4.state = deferred

...(选项 2)使用 FireBase 的层次结构对订单列表进行分类,如下所示:

  • 打开
    • 订单列表1
      • 订单1
      • 订单2
    • 订单列表2
      • 订单1
  • 关闭
    • 订单列表3
  • 延期
    • 订单列表4

...(选项 3)采取完全不同的方法?

那么,这里的王道是什么?

选项 2 的检索、处理和视觉输出

因为对于选项 1,这个问题的答案显然非常简单(如果 state == ...)我继续选项 2:如何检索选项 2 中的数据?我是否对每个状态都使用 Firebase 对象,如下所示:

var closedRef = new Firebase("https://xxx.firebaseio.com/closed");
var openRef = new Firebase("https://xxx.firebaseio.com/open");
var deferredRef = new Firebase("https://xxx.firebaseio.com/deferred");
var somethingRef = new Firebase("https://xxx.firebaseio.com/something");

或者什么被认为是处理这种数据/结构的最佳方法?

【问题讨论】:

    标签: angularjs firebase angularfire


    【解决方案1】:

    这个问题没有普遍的答案。 “最佳方法”将取决于您未在此处提供的用例的详细信息。具体来说,您将如何读取和操作数据。

    NoSQL 中的数据架构就是为了使读取更容易而努力写入。这完全取决于您计划如何使用数据。 (这也足够写一本书的一章了。)

    “选项 1”的优点是您可以轻松地迭代所有整个列表。如果您的列表以数百为单位,那就太好了。如果您想在客户端获取列表并在运行中对其进行操作,这是一种很好的方法。

    “选项 2”的优点是您可以轻松获取列表的子集。如果您的列表以数千为单位衡量,并且您通常只会获取未解决的问题而不是已关闭的问题,那就太好了。这非常适合存档/新/旧列表,例如您的。

    还有其他选择。

    使用优先级对数据进行排序

    也许最通用的方法是使用ordered data。这使您可以使用以下方式 query a subset 记录您的记录:

    new Firebase(URL).startAt('open').endAt('open').limit(10);
    

    在您只有一个标准的大多数情况下,或者当您可以从多个标准(例如“open:marketing”)轻松创建唯一标识符时,这已经足够了。例如记分牌、像你这样的状态列表、按时间戳排序的数据。

    使用索引

    您还可以通过 creating an index of keys 创建数据的自定义子集,并使用它来获取其他数据。

    当您的子集没有可识别的特征时,这是最有用的。例如,如果我从列表中选择它们并存储我的收藏夹。

    【讨论】:

      【解决方案2】:

      我认为我的这个plnkr 可以帮助你。

      在这里,单击编辑/添加并检查国家(在您的情况下为订单) - 状态(在您的情况下的状态)依赖下拉菜单可能与您想要的相同。您可能需要添加的一件事是过滤器它。

      它们都是 db 中的不同表。

      您也可以从git获取。

      【讨论】:

        猜你喜欢
        • 2017-12-09
        • 2016-06-27
        • 2017-03-27
        • 2017-05-25
        • 2017-01-02
        • 2015-05-07
        • 1970-01-01
        • 2015-11-05
        • 2017-07-21
        相关资源
        最近更新 更多