0

これが私のコードの基本的な考え方です。実際のコードから多くの余分なものを削除しましたが、ほとんどは css でした - どれもこれに影響を与えるべきではありません...

listRef.on('child_removed', function(childSnapshot, prevChildName) {
    alert('child removed!');
});

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot.ref();

    alert('child added!);

    itemRef.on('value', function(snapshot){
        alert('item value changed!');

        var name = snapshot.val().name;  // if I remove this line, child_removed is called
        $("#name").html(name);
    });
});

$("#button").click(function() {
    itemRef.remove();
});

問題は、$("#button")クリックすると、itemRef が Firebase の listRef から削除されることですが、'child_removed'イベントがトリガーされることはありません...

driveRef = undefined;

それからchild_removed呼ばれます...

他のすべてが機能します-$("#name")更新され、alert()テストに使用しているすべてのダイアログが正常に機能しています-唯一の問題はchild_removed呼び出されていません。

4

1 に答える 1

1

加藤さんのコメントは正しいと思います。ブラウザ開発ツールのJavaScriptコンソールを確認するか、すべての例外(Chromeの指示など)で中断するように設定すると、「value」コールバックがsnapshot.val()==で呼び出されていることがわかります。子が削除されるとnullになるため、コードは例外をスローし、Firebaseがそれ以上のイベント(つまり、child_removedイベント)を発生させないようにします。

Firebaseが例外をスローするイベントコールバックに対してもう少し寛容になるようにいくつかの機能作業が計画されていますが、今のところ修正は、'value'コールバックでsnapshot.val()==nullをチェックすることです。

于 2012-07-24T15:38:14.743 に答える