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);
});
我正在使用教程中的 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);
});