我有一个页面,可让您编辑用户数据。我使用FlowRouter
进行路由,可以在路由/employees/:id
上找到。
我需要在服务器上更改数据时更新详细信息表单,如果被其他客户端删除,则保留路由。
我决定使用Tracker.autorun
,只要数据发生变化,就会通知我。之前的用户信息存储在模板中,因此很容易判断记录是否已被删除。
Template.UpdateEmployee.onCreated(function () {
const self = this;
self.subscribe('user', FlowRouter.getParam('id'));
self.autorun(function () {
const _id = FlowRouter.getParam('id');
const user = Meteor.users.findOne({_id});
if(!user && self.user)
FlowRouter.go('/employees');
self.user = user;
if(!user)
return;
user.email = user.emails[0].address;
$('.ui.form').form('set values',user);
});
});
最后在onRendered
回调中,我检查数据是否已在模板上设置,因为我认为不这样做可能会导致数据在呈现模板之前可用,因此值不会出现。设置得当。这是对的吗?
Template.UpdateEmployee.onRendered(function () {
if(this.user){
user.email = user.emails[0].address;
$('.ui.form').form('set values',user);
}
});
此解决方案是否有任何陷阱?
答案 0 :(得分:0)
我本可以看到一些缺点。第一个是在客户端上进行查找查询。通常,您希望使用Meteor发布和订阅从服务器返回数据。
第二种是您传递密钥以通过URL查找数据。这可能是其他用户欺骗他们找到用户数据。
最后,如果您正在对用户对象进行查找,我假设您可能在那里存储数据。这通常是不好的做法。如果您需要使用他们的个人资料存储用户数据,最好创建一个新的集合并发布/订阅您需要的内容。