12

これを行うと、itemRef に問題はありません。

itemRef.child('appreciates').set(newFlag);
itemRef.child('id').set(newId);

itemRef の他のプロパティは残りますが、child_changed が 2 回呼び出されます

私がこれを行う場合:

itemRef.set({appreciates:newFlag,id:newId});

child_changed は 1 回だけ呼び出されますが、他のプロパティは破棄されます。参照オブジェクト全体を再作成するという不器用なもの以外に回避策はありますか?

ありがとう、

ティム

4

5 に答える 5

18

Firebase の update() 関数を使用すると、オブジェクトの一部の子を変更しながら、他の子を変更しないようにすることができます。update 関数は、変更された子の数に関係なく、書き込まれているパスに対して他のクライアントで 1 つの「値」イベントのみをトリガーします。

この例では、次のことができます。

itemRef.update({appreciates:newFlag,id:newId});

update()のドキュメントはこちらです。

于 2013-01-12T03:26:47.780 に答える
1

私はこれを次のような構造でやろうとしています:

Firebase ギグ データベース構造

私が抱えていた問題は、名前、説明、日付などの特定のフィールドで say set を実行すると、他のすべての子ノードが次のように削除されることでした:

return (dispatch) => {
    firebase.database().ref(`/gigs/${uid}`)
        .set({ name, description, date })
        .then(() => {
            dispatch({ type: GIG_SAVE_SUCCESS });
            Actions.home({ type: 'reset' });
        });
};

名前、説明、および日付ノードのみを残しますが、以下を使用して、他の子ノード (メンバー、イメージなど) を削除せずに特定のノードを更新します。

return (dispatch) => {
    var ref = firebase.database().ref(`/gigs/${uid}`);
    ref.child('name').set(name)
    ref.child('description').set(description)
    ref.child('date').set(date)
        .then(() => {
            dispatch({ type: GIG_SAVE_SUCCESS });
            Actions.home({ type: 'reset' });
        });
}; 
于 2017-05-16T13:03:49.733 に答える