【问题标题】:Post comments into a specific status将评论发布到特定状态
【发布时间】:2015-12-31 23:02:36
【问题描述】:

正如标题所说,我正在尝试对特定用户状态发表评论。到目前为止,我可以发布 cmets 并将它们保存到 firebase 中,但是这些 cmets 显示在所有状态中,当然这是因为它们没有引用到特定的用户状态。

我怎样才能做到这一点?

有人告诉我,每条评论都应该有一个带有状态或用户 ID 的属性,以便能够进行查询。但这就是我不知道该怎么做。

这是我的火力基地结构:

火力基地:

-users
-- 444198db-1052-4d8d-a1cd-c7e613fbe7c9
--- Status
--- StatusDate

-comments
-- K-nRDUXT07BllsO7T99
--- comment
--- commentDate

这是我将 cmets 保存到 firebase 中 cmets 节点的代码:

$scope.addComment = function(){ 

                        console.log("Adding Comment");
                        var comment = $scope.comment;
                        console.log(comment);

                        var refcomment = new Firebase("https://firebaseurl/comments/");
                        refcomment.push({
                            comment: comment,
                            commentDate: Firebase.ServerValue.TIMESTAMP
                        });      

        }

这里是显示 cmets 的代码(ng-repeat):

refcomments = new Firebase("https://firebaseurl/comments/");
    $scope.comments = $firebaseArray(refcomments);

HTML:

<div ng-controller="ComentariosCtrl">
  <div class="input-group">
  <input type="text" class="form-control" placeholder="Comment Here..." ng-model="comment">
  <span class="input-group-btn">
  <button class="btn btn-default" type="button" ng-click="addComment()">Post!</button>
  </span>
  </div><!-- /input-group -->
  <div class="cmt">
  <div class="panel" ng-repeat="comentarios in comments">
  <hr >
  <p>{{comentarios.comment}}</p>
  </div>
  </div><!--FIN DE COMENTARIOS -->
  </div>

有什么想法吗?

提前致谢

【问题讨论】:

  • Firebase 在 API 中没有“cmets”或“用户状态”,所以这是 Firebase 问题还是编码问题?如果这是一个 with Firebase 的编码问题,我们需要更多信息来帮助您:您想要完成什么(例如,您是否有一个用户节点并且您正在尝试在该节点中存储 cmets?)有(简短的)带有数据结构的示例代码吗?最初的问题含糊不清,因此请更新更多信息。
  • @Jay 感谢您的回答,是的,这是一个与 Angularjs、Firebase 相关的编码问题。我想要做的是能够评论每个用户状态并将该评论保存到引用该用户状态的firebase中(对不起,如果它不太清楚)。我更新了一些代码和我的 firebase 节点让您知道,如您所见,我可以创建评论并将其保存到 firebase 但不知道如何将其引用到该用户状态而不是其他用户状态,因为当我这样做时ng-repeat,cmets 显示在所有用户状态中,而不是我评论的那个。

标签: angularjs firebase angularfire


【解决方案1】:

目前尚不清楚“向特定用户状态发表评论”的确切含义,但这里有一些想法(我希望我走在正确的轨道上)

在您的示例中,无法将用户与评论“关联”。大约有 100 种不同的方法可以做到这一点,但一种可以轻松查询用户 cmets 的扁平结构是:

users
  user_id_0001
    user_name: "Bill"
    user_status: "some status"
    status_date: "some status_date"
  user_id_0002
    user_name: "Ted"
    user_status: "some status"
    status_date: "some status_date"

comments
  comment_id_0001
    made_by_user_id: "user_id_0001"
    comment: "Hey Ted!"
  comment_id_0002
    made_by_user_id: "user_id_002"
    comment: "Hey Bill! Let's go on a most excellent adventure"

然后可以在 cmets 节点中查询 made_by_user_id = "user_id_0001",这将检索 Bill 的所有 cmets。请记住,在 Firebase 中,越平坦越好。太棒了!

另一个不太灵活的选择是将用户 cmets 存储在他们自己的用户节点中

users
      user_id_0002
        user_name: "Ted"
        user_status: "some status"
        status_date: "some status_date"
        comments
          comment_id_0001:
            comment: "Just call me Neo"
            timestamp: "some timestamp"
          comment_id_0002:
            comment: "I feel like I'm in the Matrix"
            timestamp: "some timestamp"
          comment_id_0003:
            comment: "You trying to tell me.. that I can dodge bullets?"
            timestamp: "some timestamp"

现在,如果您想检索所有用户 cmets,它们就在自己的用户节点中,位于 /users/user_id_0002/cmets

这真的取决于你对数据的使用。

关键是将您的数据与其存储的节点名称分离。使用 push() 函数将生成唯一的 id 可以帮助做到这一点 - 在上面的示例中 user_id_0001 和 comment_id_0001 以这种方式生成。

【讨论】:

  • 感谢您抽出宝贵时间回答。抱歉,描述不清楚,我会尽力为您解释得更好。我试图做的类似于 facebook 的评论系统或任何其他评论系统。您可以对其他人的帖子发表评论,以便保存评论并仅将其引用到该帖子而不是其他人。正如其他人告诉我的那样,cmets 必须具有帖子的 ID,但这就是我不知道如何实现的,因为它必须是自动的。 现在我在想......使用长度怎么样?
猜你喜欢
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多