我需要一些关于如何使用ember最好地处理特定情况的建议。
我正在构建某种goodreads克隆。在我的后端,有books
,有users
,notes
将用户连接到图书(用户通过笔记有很多书)。
当登录用户访问/ books / 1这样的页面时,他应该会看到一个页面,其中包含有关该书籍的信息以及一个将其添加到自己的库中的按钮。
当登录用户访问同一页面并且他在图书馆中有图书时,他不仅应该看到图书信息,还应该看到从图书馆和其他字段中删除图书的按钮,例如要添加的文本区域评论。 (我想这意味着将同时激活BookController和NoteController)
在恩伯最好的方法是什么? / books /:book_id的路由器会做什么?如何根据用户是否已登录以及他是否在库中拥有该书来实例化正确的控制器?
谢谢
以下代码显示了我当前的尝试。我不喜欢它,因为每次我在页面上做某事时都需要分支,这取决于它是一个笔记还是一本书。我觉得应该有更好的方法来做到这一点......
# routes
App.Router.map ()->
@resource('books', ->
@resource('book', { path: ':book_id' } )
)
App.BookRoute = Em.Route.extend
model: (params) ->
book = @store.find('book', params.book_id)
if @auth.get('signedIn') and book.get('inLibrary')
return @store.filter('note', { book_id: params.book_id, inLibrary: true }, (note) ->
note.get('book_id') == params.book_id and note.get('inLibrary')
)
else
return book
# controller
App.BookController = Ember.ObjectController.extend
note: Em.computed( ->
if @auth.get('signedIn') && @get('inLibrary')
note = @store.find('note', { book_id: @get('content.id'), inLibrary: true })
note
).property('content')
signedInAndBookInLibrary: Em.computed( ->
if @auth.get('signedIn') && @get('inLibrary')
true
else
false
).property('inLibrary')
# template
{{#if signedInAndBookInLibrary}}
{{render 'book/_note' note}}
{{else}}
{{render 'book/_book' this}}
{{/if}}