Firebase中出现意外的令牌功能

时间:2015-02-26 15:54:25

标签: firebase

我正在使用教程中的Firebase聊天,我添加了一个额外的密钥对,它将以布尔形式跟踪每条消息的“状态”:

myDataRef.push({
     name: name,
     text: text,
     status: false
});

这是fiddle

我希望在更改数据库中status的值时自动更改文本。因此,如果我将一条消息更改为false,则该消息将变为红色而不是默认的绿色。

以下是我遇到问题的一点:

var done = myDataRef.orderByChild('status').equalTo(true);
   done.on('child_added', function(function(snapshot) {
       var obj = snapshot.val();
       if(obj.status == true) {
           $('.text').attr('class', 'text red');
       }
}); 

代码首先遍历所有孩子,寻找那些孩子“status”等于true的孩子。然后通过将文本变为红色来更改结果的属性。

但是,我不确定为什么,但我得到了:

 Uncaught SyntaxError: Unexpected token function

我希望有人可以帮助我!感谢。

1 个答案:

答案 0 :(得分:3)

上面的示例中有一个拼写错误:

done.on('child_added', function(function(snapshot) { ... })

请注意,重复function。相反,这应该是:

done.on('child_added', function(snapshot) { ... })

-

更新2015-03-17

your JSFiddle中,有一些错误。首先,您默认使用“绿色”创建元素:

function displayChatMessage(name, text) {
  $('#messagesDiv').prepend('<div class="text green"><i>' + name + '</i> ' + text + '<br>');
};

但是,您没有关闭<div>代码,并且您过滤掉了obj.status为假的任何情况,因此应该更新为红色:

var done = myDataRef.orderByChild('status').equalTo(true);
done.on('child_added', function(snapshot) {
  var obj = snapshot.val();
  if(obj.status == true) {                 <-- Should be 'obj.status == false'
    $('.text').attr('class', 'text red');
  }
});

下一个问题是,在换色时,您没有选择任何特定的子元素 - 您正在选择带有text类的所有字段:

var done = myDataRef.orderByChild('status').equalTo(true);
done.on('child_added', function(snapshot) {
  var obj = snapshot.val();
  if(obj.status == true) {
    $('.text').attr('class', 'text red');  <-- Offending line
  }
});

您需要为列表中的每个元素指定一些标识符,以便稍后在状态更改时可以专门更新该元素。这是一个更新版本,您可以在位于here的JSFiddle中测试:

myDataRef.on('child_added', function(snapshot) {
  var message = snapshot.val();
  var color = (message.status) ? 'green' : 'red';

  $('#messagesDiv').prepend(
    $('<div />', {
      'id'    : message.name,
      'class' : 'text ' + color,
      'html'  : '<i>' + message.name + '</i> ' + message.text + '<br>'
    })
  );
});

myDataRef.on('child_changed', function(snapshot) {
  var message = snapshot.val();
  var color = (message.status) ? 'green' : 'red';
  $('#' + snapshot.key()).attr('class', 'text ' + color);
});