如何在Backbone.js中使用嵌套视图解决循环依赖关系
How to resolve circular dependencies with nested views in Backbone.js
我正在使用Brunch和Backbone.js构建一个包含嵌套菜单的应用程序。我已经创建了MenuItemModel和MenuItemsCollection,它们都扩展了相应的Backbone基础对象。
此外,我还有一个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() }
正如你所看到的,这两个视图之间存在循环依赖关系,"childView=new MenuItemsView"这一行在我的JS控制台中导致了"Uncaught ReferenceError:MenuItemsView未定义",这并不完全出乎意料。
我的问题是有没有办法解决这个问题?我可以在稍后的代码中通过递归函数创建嵌套菜单,但这似乎不像我希望的那样整洁和独立。此外,我在SOF上发现了以下两个实例,人们建议使用与上面代码完全相同的嵌套视图。我做错了什么?
https://stackoverflow.com/a/6476507
在主干js 的视图中嵌套视图
由于您没有在MenuItemView
的类定义中使用MenuItemsView
,因此应该不会有任何问题。尝试更改
childView = new MenuItemsView
收件人:
childView = new exports.MenuItemsView
看起来您将MenuItemsView放入了exports命名空间,但initialize
正在自己的本地命名空间中寻找一个名为MenuItemsView
的类。
相关文章:
- angularjs中带有ui路由器的嵌套视图
- 如何加载嵌套3个状态的UI路由器UI视图模板
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 滚动所有嵌套的滚动条,使HTML元素进入视图
- 状态更改期间角度UI路由器中的嵌套视图滞后
- 带有ui.router的带角度的嵌套视图
- Angularjs 中的嵌套视图,每个视图都有单独的控制器
- 挖空.js嵌套视图模型不起作用
- Angular UI Router-在不了解第二级嵌套视图的情况下更改第三级嵌套视图
- EmberJS linkTo嵌套资源正在重新呈现父视图
- 创建表时在marionete.js中嵌套视图
- Angular 1.3+ui路由器+生成器ng poly嵌入嵌套(?)视图不起作用
- 与AngularJs中的嵌套视图相关
- MarionetteJS嵌套视图
- 嵌套的主干视图未添加到DOM中
- 嵌套状态的多个视图
- Ember.js-隐藏嵌套资源中的父视图
- AngularJS将ui视图嵌套到ng repeat中
- 将创建视图嵌套在Backbone.js中的显示视图中
- 主干视图嵌套