Javascript Backbone.js |如何存储视图的元素以供以后检索?

Javascript Backbone.js |如何存储视图的元素以供以后检索?,javascript,jquery,view,undefined,backbone.js,Javascript,Jquery,View,Undefined,Backbone.js,这是我第一次尝试使用Backbone.js,所以我决定制作一个简单的测试应用程序,用菜单项模拟餐厅菜单。我跟在后面 向集合添加模型时遇到问题。我已将视图方法绑定到集合的add事件,该事件应更新视图。下面是删除尽可能多的不相关代码的代码 (注意:为了简洁起见,我删除了诸如局部范围var声明和闭包之类的内容。下面的内容仍然有点长,我知道这很烦人,但应该非常简单易懂): 我已经用注释标记了有问题的区域。根据报告: 如果页面上包含jQuery或Zepto,则每个视图都有一个$function,用于运行视

这是我第一次尝试使用Backbone.js,所以我决定制作一个简单的测试应用程序,用菜单项模拟餐厅菜单。我跟在后面

向集合添加模型时遇到问题。我已将视图方法绑定到集合的add事件,该事件应更新视图。下面是删除尽可能多的不相关代码的代码

(注意:为了简洁起见,我删除了诸如局部范围
var
声明和闭包之类的内容。下面的内容仍然有点长,我知道这很烦人,但应该非常简单易懂):

我已经用注释标记了有问题的区域。根据报告:

如果页面上包含jQuery或Zepto,则每个视图都有一个$function,用于运行视图元素范围内的查询

所以,如果我设置
this.menuList=this.$(“#menuList”)
在render方法中,为什么我不能访问
addMenuItem
方法中的
this.menuList
?我在顶部链接的演示就是这样做的。另外,如果我将
this.menuList
替换为jQuery选择器,如下所示:

addMenuItem : function (MenuItem) {
    var view = new MenuItemView({ model : MenuItem });
    $('#menuList').append(view.render().el);
}
一切正常。但是我不希望每次执行
addMenuItem
时都重新选择menulist ID。RightWayTM将在渲染后对其进行缓存


另请注意:我认为问题可能在于ICanHaz模板返回速度不够快,但随后
这个。menuList
将是一个空数组,而不是
未定义的
,所以不是这样。

可能在调用render方法之前调用了addMenuItem方法,因此addMenuItem中缺少menuList的定义

为什么不按一下this.menuList=this.$(“#menuList”)到初始化方法并尝试?

您遇到了“用JavaScript获取”的问题——动态范围
this
关键字。当您将
this.addMenuItem
作为引用而不绑定它时,
addMenuItem
函数将失去其
this
的概念。有两种简单的方法可以在代码中修复它,或者替换此行:

this.model.MenuSelection.bind('add', this.addMenuItem);
为此:

this.model.MenuSelection.bind('add', _.bind(this.addMenuItem, this));
或者将这一行添加到初始化函数的顶部,这将有效地完成相同的任务:

_.bindAll(this, 'addMenuItem');

只是试了一下。还没有定义。注意,博客教程中所有内容的排列顺序与我的示例相同成功了。js文档为我解释了这一点。谢谢
_.bindAll(this, 'addMenuItem');