0
我正在構建一個朋友包,並且需要在創建的每個新用戶文檔上存儲一些數據。我查看了文檔,並找到了Accounts.onCreateUser
。文檔明確指出它只能被調用一次,其他調用將覆蓋先前指定的行爲。覆蓋流星中的包裝方法
因此,我所做的是:
- 存儲舊功能
- 覆蓋實際
onCreateUser
功能有一個,增加了所需要的數據 - 這種新的功能,然後調用加入我的數據後,舊的
。
if (Meteor.isServer) {
var _onCreateUser = Accounts.onCreateUser.bind(Accounts);
// Since onCreateUser overrides default behavior, and we don't want to restrict package users
// by removing the onCreateUser function, we override onCreateUser to modify the user document before the regular onCreateUser call.
Accounts.onCreateUser = function (func) {
console.log('onCreateUser definition');
_onCreateUser(function (options, user) {
console.log('onCreateUser call, the user should now have a profile');
if (!user.profile) {
user.profile = options.profile || {};
}
if (!user.profile.friends) {
user.profile.friends = [];
}
return func(options, user);
});
};
}
的問題是,如果我看在我的服務器日誌,我從來沒有看到任何日誌onCreateUser definition
或onCreateUser call, ...
含義此代碼永遠不會實際運行。
我做錯了嘗試覆蓋提供的軟件包行爲?
的問題是,這onCreateUser通話是在一個包。當我像你的例子那樣做的時候,當他們將應用程序代碼中的函數綁定到onCreateUser時,那些使用我的包的人會覆蓋我的包的自定義onCreateUser行爲,對嗎? – Azeirah 2014-08-31 15:57:27
是的,但是,如果他們沒有調用'Accounts.onCreateUser',你的代碼將永遠不會運行。 – 2014-08-31 22:36:21