我的数据库中有两个单独的 Posts 和 Authors 列表,每个 Post 都包含一个 authorId 来引用相应的作者。
以下方法通过系统地包含每个帖子的作者姓名来帮助我检索整个帖子列表:
app.factory('NormalizedPosts', function($firebaseArray, FirebaseFactory) {
var PostsWithAuthors = $firebaseArray.$extend({
// override $$added to include author name
$$added: function(snap) {
var record = $firebaseArray.prototype.$$added.call(this, snap);
FirebaseFactory.$getAuthorId( record.authorId ).$loaded(function( authorData ) {
record.authorData = authorData;
});
return record;
},
// ????????
$$updated: function(snap) {
var rec = $firebaseArray.prototype.$$updated.call(this, snap);
var updatedRecord = this.$getRecord(snap.key());
FirebaseFactory.$getAuthorId( updatedRecord.authorId )
.$loaded(function( authorData ) {
rec.authorData = authorData;
});
return rec;
}
});
return PostsWithAuthors;
});
PS:FirebaseFactory 只是 firebase 方法的包装器。
然后我打电话
var list = new NormalizedPosts ( new Firebase(FBURL).child("posts") );
在我的控制器中获取完整列表。这很好用。
我正在为 $$updated 方法应该包含什么内容而摸不着头脑:当添加新 Post 时,列表会按预期更新(通过 $$added 方法)。但是,当 Post 数据(例如帖子标题)发生变化时,我的列表不会更新,因为我目前在 $$updated 方法中返回 false。
问题:$$updated 方法中应该包含什么,以便当 Post 数据发生更改时,我的列表会相应更新(并进一步返回作者的姓名!)。谢谢