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