Meteor. Як же запив цей ваш iron:router для CRUD?

Елементарно! Але якби мені показали подібну інструкцію раніше…

Джерело, а далі розповім.


Створюю колекцію.
@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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.