Meteor. Как же запилить этот ваш iron:router для CRUD?

Элементарно! Но если бы мне показали подобную инструкцию раньше…ЗаданиеПо запросу /profile без ключа отдаю страницу login, если пользователь «не того», иначе отдаю страницу на добавление newProfile или редактирование profile (editMode) своего профиля. А по запросу /profile/key отдаю страницу на просмотр profile (not editMode) любого профиля; при этом userId не светится, и неверные ключи отвергаются invalidProfile.[исходник]

Решение Создаю коллекцию. @Collections.Profiles = new Meteor.Collection ('profiles') Карта роутера (название-путь). Router.map → @route 'profile', path: '/profile/:_id?' Создаю роутер. @ProfileController = RouteController.extend Переменная с искомыми данными (нужна для передачи между двумя методами роутера). profile: null Роутер будет ожидать объявленные подписки. waitOn: → Если в URL есть параметр, то подписка на просмотр коллекции. if @params._id Meteor.subscribe 'profile4view', @params._id Иначе если пользователь залогинен, то подписка на редактирование коллекции. else if Meteor.userId () Meteor.subscribe 'profile4edit', Meteor.userId () Обработка запроса к роутеру: получаю данные из коллекции и выбираю шаблон. action: → if @params._id @profile = Collections.Profiles.findOne {_id: @params._id} if @profile # @template = 'profile' else @template = 'invalidProfile' else if Meteor.userId () @profile = Collections.Profiles.findOne {userId: Meteor.userId ()} if @profile # @template = 'profile' else @template = 'newProfile' else @template = 'login' @render () Передаю данные в шаблон на рендеринг (шаблон 'profile' по умолчанию — это имя роутера). data: → if not @ready () or @template in ['login', 'invalidProfile', 'newProfile'] return if true # @template is 'profile' result = editMode: not @params._id profile: @profile return result Публикация подписок. Meteor.publish 'profile4edit', (userId) → check (arguments, [Match.Any]) [ Collections.Profiles.find userId: userId ] Meteor.publish 'profile4view', (id) → check (arguments, [Match.Any]) [ Collections.Profiles.find _id: id ] Правила доступа для коллекции. @Collections.Profiles.allow insert: (userId, doc) → userId and doc and userId is doc.userId update: (userId, doc, fieldNames, modifier) → userId and doc and userId is doc.userId # remove: (userId, doc) → # userId and doc and userId is doc.userId fetch: ['userId'] PS Удаление не реализовано. Дедушка учил, что не надо ничего выкидывать, в хозяйстве все пригодится.

PSS Веселюсь на Метеоре с момента выхода версии 1.0, настойчиво рекомендую. Несколько открытых проектов: браузерная игрушка, новостная лента, генератор форм, фреймворк для мобильников, интернет-магазин для мобильников, тудушечка, клон Trello, доска объявлений, учебник для челябинцев. Новости о Метеоре на crater.io.

© Habrahabr.ru