Firebase 中的意外标记函数

Unexpected token function in Firebase

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

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

这里是 fiddle.

我希望在更改数据库中的状态值时自动更改文本。因此,如果我将一条消息的它更改为 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

希望有人能帮帮我!谢谢

您在上面的示例中有错字:

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

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

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

--

更新2015-03-17:

your JSFiddle中,有一些错误。首先,您默认使用 "green" 创建元素:

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');
  }
});

下一个问题是,在颜色更改时,您没有选择任何特定的子元素 - 您选择的是 all 字段 text class:

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);
});