获取记录编辑页面

时间:2016-09-02 13:53:44

标签: meteor meteor-blaze

我有一个页面,可让您编辑用户数据。我使用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);
    }
});

此解决方案是否有任何陷阱?

1 个答案:

答案 0 :(得分:0)

我本可以看到一些缺点。第一个是在客户端上进行查找查询。通常,您希望使用Meteor发布和订阅从服务器返回数据。

第二种是您传递密钥以通过URL查找数据。这可能是其他用户欺骗他们找到用户数据。

最后,如果您正在对用户对象进行查找,我假设您可能在那里存储数据。这通常是不好的做法。如果您需要使用他们的个人资料存储用户数据,最好创建一个新的集合并发布/订阅您需要的内容。