【发布时间】:2016-02-24 19:33:11
【问题描述】:
我有一个关于 Meteor 的一般性问题,它的客户端更新与 angular 相结合。
假设我正在使用流星帐户捆绑包并使用填充了用户对象的“用户”集合(或任何其他集合,没关系)。现在我想构建一个详细信息页面,如果我想显示一个用户对象的详细信息。
在此页面上,我订阅了以下出版物:
// 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 时如何实现?
【问题讨论】:
-
您的模板中有一些非反应性的东西,也许是帮助器将用户对象返回到您的模板? (您没有显示该代码)。完全不同的是,您的发布方法在您的应用程序中打开了一个卡车大小的安全漏洞,任何客户端(无论是否登录)都可以通过该漏洞访问所有任何用户的信息,甚至获取列表所有用户帐户。
-
感谢您的评论。这只是一个解释我的问题的示例代码,我不会放在网上。
标签: javascript angularjs meteor angular-meteor