我是 Backbone(和 Marionette)的新手,并尝试使用两者编写一个非常简单的应用程序。该应用程序在左侧导航中有一个“组”菜单,在右主 div 上有一个“条目”列表。每次单击组菜单项时,我都会过滤具有组 ID 的条目并在隐藏所有其他项时显示它们。
这是 Entry Item 视图(所有脚本都在 CoffeeScript 中):
class EntryItemView extends Backbone.Marionette.ItemView
tagName: 'tr'
template: _.template $('#entryItemTemplate').html()
render: ->
@$el.html @template(@model.toJSON())
show: ->
@$el.show()
hide: ->
@$el.hide()
这是条目列表视图,扩展了 Marionette 的 CollectionView:
class EntryListView extends Backbone.Marionette.CollectionView
itemView: EntryItemView
el: '#main tbody'
这是 AppRouter,非常简单:
class AppRouter extends Backbone.Router
routes:
'group/:id' : 'showGroup'
router = new AppRouter()
router.on 'route:showGroup', (id) ->
_.each entryViews, (view) ->
if view.model.get('group_id') is parseInt(id)
view.show()
else
view.hide()
(该entryViews
变量是一个简单的全局数组,用于存储所有 EntryItemView 实例)。
使用这种方法,将应用导航到 /group/:id 确实会调用每个 EntryItemView 对象的 show() 和 hide() 方法。问题是,看起来这个对象和实际 HTML 之间的引用不存在,所以实际元素<tr>
不会显示或隐藏。
你们能指出我在这里做错了什么吗?提前致谢。