2013-12-12 2 views
0

Я довольно новичок в Meteor и Iron Router, и я пытаюсь создать маршрут, похожий на этот «/ users/hippomoe/bookmarks/Kj6ecNk7DeW7PmmGA», где hippomoe будет текущим зарегистрированным пользователем, а Kj6ecNk7DeW7PmmGA будет идентификатором закладки. Некоторые из вещей, которые я попытался было добавить Рули помощник, который обеспечивал бы имя пользователяКак определить маршруты, которые включают текущего пользователя с помощью Iron Router?

bookmark: function() { 
    return { 
     _id: this._id, 
     user: Meteor.user().username 
    }; 
} 

и я также попытался определения пользователя: Meteor.user() имя пользователя в контексте данных в определении RouteController.. В обоих случаях я получаю следующую ошибку: «Вы вызвали Route.prototype.resolve с отсутствующим параметром». Пользователь «не найден в параметрах»

Я попытался найти пример, иллюстрирующий этот тип маршрута (который я предположим, было бы общим). Другие вопросы, которые я видел в StackOverflow, касались того, чтобы связать пользователя с конкретным документом, а не с текущим пользователем, который вошел в систему.

Кажется, что я пропустил что-то простое. Может ли кто-нибудь предоставить/указать мне простой пример того, как этого добиться?

ответ

1

У меня возникли трудности с пониманием того, зачем вам нужен такой маршрут. Если вы уже знаете имя зарегистрированного пользователя, зачем вам нужно его еще раз на маршруте? Или это означает, что серверная сторона? В этом случае, пожалуйста, покажите свои маршруты.

В противном случае, это не работает:

Router.map(function() { 
    this.route('postShow', { 
    path: '/users/:ignoreme/bookmarks/_id', 
    data: function() { 
     var params = this.params; 
     var user = Meteor.user().username; 
     if (user == params.ignoreme) { 
      ... 
     } else { 
      return "something went wrong"; 
     } 
    } 
    }); 
}); 

Это просто, чтобы шаблон URL-адрес вы хотите, но опять же, я не понимаю, почему вы не просто использовать URL/пользователь/закладки или аналогичные, а затем изменить логику на зависимость от Meteor.user().

+0

Маршрут «/ пользователи/hippomoe/закладки/_id», я полагаю, подобную структуру понятия, как то, что StackOverflow имеет с их '/ users/1766665/hippomoe', когда вы нажимаете на значок репутации/значка вверху. У меня нет большого опыта в разработке URL-адресов, поэтому я мог бы отказаться от этой структуры URL-адресов, и мой вопрос может быть неясным. – Derek

+1

Что касается дизайна URL-адреса, вопрос в том, могут ли ваши закладки просматривать другие. В StackOverflow есть общедоступные страницы профиля, поэтому им нужен URL-адрес, чтобы ссылаться на них. Идентификатор пользователя - фактически единственная требуемая часть («/ users/1766665 /»), которая является хорошим дизайном, потому что она позволяет пользователям изменять свои имена пользователей, если это необходимо. В вашем приложении, если пользователям разрешено просматривать только свою информацию, вам не нужен идентификатор в URL-адресе. – alanning

+0

@alanning Использование идентификатора в URL-адресе вместо имени пользователя обеспечивает гибкость, о которой я не думал. Другие пользователи смогут просматривать общедоступные закладки на странице закладок пользователей. – Derek

0

рули помощник, который я написал в моем вопросе

bookmark: function() { 
    return { 
     _id: this._id, 
     user: Meteor.user().username 
    }; 
} 

работал бы, если бы я указан синтаксис pathFor правильно. Мой путь должен выглядеть так:

{{pathFor 'saveBookmark' bookmark}} 

Я случайно покончил с закладкой!

0

Я думаю, что вам не хватает «:» перед _id, попробуйте следующее:

path: '/users/:ignoreme/bookmarks/:_id', 
+0

Да, я не очень хорошо написал пример маршрута. Я смешал конкретный пример URL с тем, как версия с параметрами будет отображаться на моих маршрутах. Я изменил пример в своем вопросе. Я не забыл «:» на своем маршруте. Тем не менее, я не выражал pathFor правильно в своем HTML. – Derek