gpt4 book ai didi

meteor - 有没有一种好的方法可以将每个 Meteor.user 包装在具有原型(prototype)函数等的对象中?

转载 作者:行者123 更新时间:2023-12-02 06:41:13 25 4
gpt4 key购买 nike

我正在尝试想出一种很好的方法来将从 Meteor Accounts Collection 中获取的每个用户包装在一个函数中,包括一些原型(prototype)辅助函数和来自其他集合的计数等。描述这一点的最佳方法是在代码中。

我想要将每个用户包装在其中的 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);
}
});

将其实现到 Handlebars 助手中也很容易,替换 {{currentUser}} 的使用,如下所示:

Handlebars.registerHelper('thisUser', function() {
if (Meteor.user()) {
return new User(Meteor.user());
} else {
return false;
}
});

除此之外我想做的是,当 Meteor 返回 Meteor.user() 或 Meteor.users.find({}).fetch() 时,它包含这些辅助函数和短句柄名字、姓氏等

我可以以某种方式扩展 Meteor.user() 或者有什么方法可以做到这一点吗?

最佳答案

在 Meteor 0.5.8 中,您可以添加一个变换函数,如下所示:

Meteor.users._transform = function(user) { 
// attach methods, instantiate a user class, etc.
// return the object
// e.g.:
return new User(user);
}

您可以对非用户集合执行相同的操作,但在实例化集合时也可以这样做:

Activities = new Meteor.Collection("Activities", {
transform: function (activity) { return new Activity(activity); }
});

(这种方式似乎不适用于“特殊”用户集合)

关于meteor - 有没有一种好的方法可以将每个 Meteor.user 包装在具有原型(prototype)函数等的对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com