2016-09-02 2 views
0

У меня есть страница, которая позволяет редактировать пользовательские данные. Я использую 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

Я вижу пару недостатков по своей сути. Первый из них выполняет запрос поиска на клиенте. Как правило, вы хотели бы вернуть данные с сервера, используя публикацию Meteor и подписку.

Во-вторых, вы передаете ключ, чтобы найти данные по URL-адресу. Это может быть подделано другими пользователями, чтобы они могли найти данные пользователей.

Наконец, если вы выполняете поиск на объекте пользователя, я предполагаю, что вы можете хранить там данные. Это, как правило, плохая практика. Если вам нужно хранить данные пользователя с их профилем, лучше всего создать новую коллекцию и опубликовать/подписаться, что вам нужно.

+0

Как вы можете видеть в представленном коде, я действительно подписываюсь, и только сервер будет возвращен только одной записью, но мне все же нужно получить объект, который только что заставило меня понять, что мне не нужно указывать идентификатор чтобы найти его, поскольку никакие другие пользователи не будут доступны. – pikausp

+0

Во-вторых, это администратор, обновляющий информацию о сотрудниках. И к третьему моменту я прочитал документы и просмотрел SO, и из того, что я нашел, профиль может быть изменен пользователем, которого я не хочу, и в этом случае либо запретить правила, либо хранить данные на объекте пользователя должны быть оба прекрасные. Извините двойной комментарий, по телефону – pikausp

+0

К сожалению, метод подписки не видел. Тогда я бы сказал, что все в порядке. Я бы лично выделил данные из профиля пользователя и сохранил идентификатор пользователя в сеансе, а не передал его по проводу. – NicholasByDesign