javascript - 如何为 Firebase 数据库中的每个人设置唯一 ID,以便在多个人同名时我可以选择删除哪个 ID?

标签 javascript firebase

我会尽力解释这一点。

我正在制作一本通讯录,您可以在其中存储以下内容:

  • 名字
  • 姓氏
  • 电子邮件
  • 电话号码
  • 没有什么可以阻止您添加名字和姓氏相同的两个人,例如 Tom Sawyer。 现在,假设我们有两个 Tom Sawyer 添加到 Firebase 数据库中,位于 Firebase 数据库生成的两个随机且唯一的 key 下。像这样:

    enter image description here

    它在 HTML 中的显示如下:

    html view of the persons

    当您单击其中一个名称旁边的删除按钮时,该名称应该会从 HTML 和数据库中消失。不过,这就是棘手的地方,我无法告诉应该从数据库中删除哪个 Tom Sawyer,我无法使用唯一的键名称,因为如果我循环遍历它们并搜索 Tom Sawyer,我将得到两次命中,并且它只会随机选择一个。

    我的第一个想法是添加第二个唯一 ID 作为属性,但这会以与唯一 Firebase key ID 相同的方式失败。唯一 ID 必须与添加的名字和姓氏相关联,而不是随机化(至少在我看来是这样),以便我可以将 HTML Tom Sawyer 与数据库中的 Tom Sawyer 相关联。这必须独立发生,与数据库中存在多少《汤姆索亚历险记》无关,否则它将无法工作。

    我应该如何解决这个问题?

    最佳答案

    您想要使用 .key()(2.x 之前的 .name())来获取每条记录的推送 ID。

    一个 pojo 示例(错误,+jQuery)

    例如,在 pojo 中(使用 jQuery 来抽象 DOM 位):

    var ref = new Firebase(URL);
    ref.child('contacts').on('child_added', function(snap) {
       var data = snap.val();
       var name = data.first + ' ' + data.last;
    
       // some proprietary code to add them to the DOM, the critical part 
       // here being that we include the push id in the data...
    
       // set the push id as data-id so we can refer to it!
       var html = '<li data-id="' + snap.key() + '">' +
           '<span>' + name + '</span> ' +                  // user's name
           '<button data-event="edit">Edit</button> ' +    // edit button
           '<button data-event="delete">Delete</button>' + // delete button
           '</li>';
       $(html).appendTo('#theList');
    });
    
    // handle clicking the delete button
    $('[data-event="delete"]').click(function(e) {
       e.preventDefault();
    
       // fetch the push id from data-id="..." attribute
       var pushId = $(this).closest('li').attr('data-id');
    
       // remove it from Firebase
       ref.child('contacts').child(pushId).remove();
    });
    

    框架示例(Angular)

    当然,一个好的框架可以为你节省大量的精力。例如,我是 Angular 的粉丝:

    <ul>
      <li ng-repeat="user in contacts">
         <span>{{user.first}} {{user.last}}</span>
         <button>Edit</button>
         <button ng-click="users.$remove(user)">Delete</button>
      </li>
    </ul>
    

    我的 Angular Controller :

    app.controller('ctrl', function($scope, $firebase, $window) {
       var ref = new $window.Firebase(URL);
       $scope.contacts = $firebase(ref).$asArray();
    });
    

    关于javascript - 如何为 Firebase 数据库中的每个人设置唯一 ID,以便在多个人同名时我可以选择删除哪个 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26784052/

    相关文章:

    java - 启动 Activity 不起作用

    javascript - Node JS + ExpressJS - net::ERR_CONNECTION_RESET?

    javascript - 定期更新 firebase 条目

    javascript - 如何删除 angularfire2 中的链接引用?

    swift - query.ref.removeValue 移除整个子节点而不仅仅是一个节点

    firebase - 如何使用结构表示Cloud Firestore中的分层数据?

    Javascript数组元素没有改变

    javascript - 是否可以将 Dojo 与其他 JS 框架结合起来?

    javascript - 迭代对象并更改对象值

    javascript - Safari iOS - 禁用在输入焦点上隐藏地址栏