我試圖想出一個很好的方式來包裝我從一個函數中的流星帳戶集合中獲取每個用戶,包括一些原型助手功能和從其他集合計數等。最好的方式來描述碼。有沒有一種很好的方式來包裝每個Meteor.user與原型功能等對象?
用戶功能我想包裝每個用戶會是這個樣子:
// - - - - - -
// USER OBJECT
// - - - - - -
var currentUser = null; // holds the currentUser object when aplicable
function User(fbId) {
var self = this,
u = (typeof id_or_obj == 'string' || id_or_obj instanceof String ? Meteor.users.findOne({'profile.facebook.id': id_or_obj}) : id_or_obj);
self.fb_id = parseInt(u.profile.facebook.id, 10),
// Basic info
self.first_name = u.profile.facebook.first_name,
self.last_name = u.profile.facebook.last_name,
self.name = u.name,
self.birthday = u.birthday,
self.email = u.profile.facebook.email,
// Quotes
self.likeCount = Likes.find({fb_id: self.fb_id}).count() || 0;
}
// - - - - - - -
// USER FUNCTIONS
// - - - - - - -
User.prototype = {
// Get users avatar
getAvatar: function() {
return '//graph.facebook.com/' + this.fb_id + '/picture';
},
getName: function(first_only) {
return (first_only ? this.first_name : this.name);
}
};
我可以輕鬆擁有一個全球性的「currentUser」變量,它包含有關當前登錄的信息用戶在客戶端這樣的:
Meteor.autorun(function() {
if (Meteor.user()) {
currentUser = new User(Meteor.user().profile.facebook.id);
}
});
它也很容易落實到一個把手幫手此,更換日E使用的{{currentUser}}
像這樣:
Handlebars.registerHelper('thisUser', function() {
if (Meteor.user()) {
return new User(Meteor.user());
} else {
return false;
}
});
我想除了這個做的是讓這個當流星返回Meteor.user()或Meteor.users.find({})獲取。 (),它包含這些幫助函數和first_name,last_name等短句柄。
可以以某種方式擴展Meteor.user()還是有一些方法可以做到這一點?
的擴展集我想你可能會丟失在_tranform功能的'''return'''。 – Diogenes 2013-05-22 15:21:32
這似乎工作,但我認爲它可能會導致後來的麻煩。見github.com/meteor/meteor/issues/810。內部流星碼假設用戶不會被轉換。 – Diogenes 2013-05-22 16:19:57
是的,謝謝。我添加了'返回'。 – georgedyer 2013-05-22 17:03:12