使用Firebase Javascript API按值查找元素

时间:2015-01-14 22:56:45

标签: javascript html firebase

以下是我为代码添加新颜色的代码,它完美运行,Firebase信息中心显示每种颜色都添加了一个新的颜色表ID:

// example pushColor('yellow') {
function pushColor(colorName) {

    var colorsRef = fireBaseRef.child("colors");
    colorsRef.push(colorName, function(error) {
        if (error) {
            alert("Color could not be saved." + error);
        }
    });
}

然而,在添加新颜色之前,我想确保我添加的颜色尚未存在于表中。这是我到目前为止的尝试:

function colorExists(colorName) {
    var colorsRef = fireBaseRef.child("colors");

    colorsRef.once('value', function(snapshot) {
        exists = (snapshot.val() !== null);
        if (exists) {
            alert(colorName + ' exists!');
        } else {
            alert(venueName + ' does not exist!');
        }
    });
}

问题是,当我提交表单时,我会收到以下行为: 第一次检查颜色“黑色”(带空表):

"black does not exist!"

我添加黑色作为颜色。

第二次检查颜色“黑色”:

"black exists!"

......到目前为止,非常好。但是如果我提交颜色“紫色”(不在数据库中),我得到:

"purple exists!"

插入第一种颜色后我搜索的任何内容都会返回“存在!”

我猜我不理解colorExists()方法的工作方式,任何人都可以指出我正确的方向来修复这个功能,以便它做我想要的,或者帮我找到相关的文档通过其中一个值来查找实体?

1 个答案:

答案 0 :(得分:0)

发布此消息后我发现了...我需要将我的colorExists方法更新为以下内容(代码可以使用一些清理但我希望每个人都能看到我更改的内容):

function colorExists(colorName) {
    var colorsRef = fireBaseRef.child("colors");

    colorsRef.once('value', function(snapshot) {
        if (snapshot !== null) {

           snapshot.forEach(function(snapshot) {

                // if the value matches the name we specified
                if (snapshot.val() === colorName) {

                    exists = true;
                    return;
                }
            });

            if (exists) {
                alert(venueName + ' exists!');
            } else {
                alert(venueName + ' does not exist!');
            }
        });
}