2013-12-23 53 views
2

我試圖在刪除實體時更新相關實體。問題是相關實體不是客戶端集合的一部分。有沒有辦法只在服務器上進行更新?更新不屬於客戶端集合的實體

具體示例:調用'removeSlack'時,我想更新所有副本並從其副本數組中刪除已刪除的slackId。但是因爲副本不是客戶端'Slack.findOne(copyId)'集合的一部分,所以找不到任何東西。

Meteor.methods(
    removeSlack: (slackId) -> 
    slack = Slack.findOne(slackId) 
    for copyId in _.pluck(slack.copies, 'slackId') 
     copy = Slack.findOne(copyId) 
     if copy 
     Slack.update(copyId, { $set: {copies: _.without(copy.copies, {slackId: slackId, userId: Meteor.userId()})}}) 
    Slack.remove(slackId) 
) 

回答

1

你可以用你只需要在服務器上運行任何代碼的Meteor.isServer()塊:http://docs.meteor.com/#meteor_isserver

或者,你可以把代碼文件,你只需要在服務器上運行您的項目的/ server文件夾。

+0

所以事實證明,問題不是更新沒有執行,而是_.without使用對象相等,我期望像_.isEqual那樣進行深度比較。在不使用_.isEqual(c,{slackId:slackId,userId:Meteor.userId()}))時使用(c for copy.copies,而不是_.without部分修復它。 – Manuel