Firebase会侦听特定字段中的更改

时间:2013-09-18 15:23:10

标签: firebase

我正在使用firebase进行聊天的实时虚拟房间。我想知道是否可以在firebase db中监听特定字段的更新。例如,如果数据的结构如下:

{channel_name: test-app,
  {id: unique_id_generated_automatically_by_firebase,
    {user_id: some_id,
     position: {
       current: {x:x,y:y},
       start: {x:x,y:y},
       end: {x:x,y:y}
    }
  }
  {id: unique_id_generated_automatically_by_firebase,
    {user_id: some_id,
     position: {
       current: {x:x,y:y},
       start: {x:x,y:y},
       end: {x:x,y:y}
    }
  }
} 

目前我能够像那样听取db中的任何变化

//reference to firebase db
var room = new Firebase("https://test-app.firebaseio.com/");
room.on("child_changed", function(snapshot) {
   //do something here; 
});

我正在寻找的方法是监听字段position.start和position.end的变化,但忽略position.current(这些是唯一会更新的字段)。仅当用户登录以获取当前在房间中的所有用户的当前位置时,才需要当前位置。之后,将根据起始值和结束值在客户端计算机上对位置进行动画处理。我还希望通过不向所有连接的客户端发送当前位置的更改来节省数据传输,但在请求时具有当前状态。任何帮助和建议非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以为您感兴趣的每个字段绑定.on(“value”)事件。

var room = new Firebase("https://test-app.firebaseio.com/" + roomID);
room.child("position/start").on("value", onChange);
room.child("position/end").on("value", onChange);
function onChange(snapshot) {
  if (snapshot.name() == "start") {
    // position.start changed to snapshot.val()
  } else if (snapshot.name() == "end") {
    // position.end changed to snapshot.val()
  }
}