【发布时间】:2012-02-14 22:03:46
【问题描述】:
我正在使用 Brunch 和 Backbone.js 构建一个包含嵌套菜单的应用程序。我创建了一个 MenuItemModel 和一个 MenuItemsCollection,它们都扩展了它们对应的 Backbone-base-objects。
此外,我还有一个 MenuItemView(用于单个项目)以及一个 MenuItemsView(用于项目集合)。剥离下来,它们看起来像这样:
class MenuItemView extends Backbone.View
tagName: 'li'
initialize: (options) ->
if @model.get('children')?
childCollection = new MenuItemList
childView = new MenuItemsView
el: $('<ul>').appendTo @el
collection: childCollection
class exports.MenuItemsView extends Backbone.View
initialize: (options) =>
@collection.bind 'add', @add
add: =>
view = new MenuItemView { model: @collection.last() }
如您所见,两个视图之间存在循环依赖关系,而且并非完全出乎意料,在我的 JS 控制台中,“childView = new MenuItemsView”行会导致“Uncaught ReferenceError: MenuItemsView is not defined”。
我的问题是有没有办法解决这个问题?我可以稍后在代码中通过递归函数创建嵌套菜单,但这似乎不像我想要的那样整洁和独立。此外,我在 SOF 上发现了以下两个实例,人们建议使用嵌套视图,就像上面的代码一样。我做错了什么?
【问题讨论】:
-
你试过
class MenuItemsView extends Backbone.View而不是class exports.MenuItemsView extends Backbone.View吗?
标签: javascript backbone.js coffeescript circular-dependency