使用Angular Meteor的服务器方法更新Meteor客户端对象

Meteor client side object update after server method using Angular-Meteor

本文关键字:Meteor 更新 客户端 方法 对象 服务器 Angular 使用      更新时间:2023-09-26

我有一个关于Meteor的一般问题,它的客户端更新与angular相结合。

让我们假设我使用的是meters-Accounts捆绑包,并使用充满用户对象的"用户"集合(或任何其他集合,这无关紧要)。现在我想建立一个详细信息页面,如果我想显示一个用户对象的详细信息。

在这个页面上,我订阅了以下出版物:

// server code
Meteor.publish('userDetails', function(userId) {
  return Meteor.users.find({ _id: userId });
});

在客户端,我订阅并加载这样的对象:

$scope.user = $scope.$meteorObject(Meteor.users, userId, false)
   .subscribe('userDetails', userId);

在详细信息页面上有一个按钮,该按钮触发流星方法,该方法更新服务器端当前显示的用户对象。类似这样的东西:

模板:

// client template
<div>User object: {{user}}</div>
<button ng-click="modifyUser()">Do it!</button>

控制器:

// client controller
...
$scope.modifyUser = function() {
    $meteor.call('updateUser', $scope.user._id, 'foo').then(function(result) { 
        ... 
    }, function(err) { 
        ... 
    });
}

服务器方法:

// server
Meteor.methods({
    updateUser: function(userId, someValue) {
        return Meteor.users.update({ _id: userId }, { $set: { 'profile.someValue': someValue }});
    }
});

现在我的问题是:

我所期望的是在updateUser客户端方法调用之后自动更新用户对象。但实际上什么都没发生。我做错了什么?

一般情况下:如何触发在服务器上修改的模型的客户端更新?使用Meteor Angular时如何实现这一点?

我找到了问题的原因:我的所有Meteor.methods(...)都只在服务器端定义。现在一切似乎都如预期的那样。