我正在学习 Backbone.js 和 jQuery,以更新我的客户技能。我在渲染视图时遇到了一个障碍,我无法将偶数附加到子元素,同时在每个函数/循环中迭代它们。这是渲染功能的相关部分
var NavigationView = Backbone.View.extend({
el: $('#nav-navigation')
, firstRender: true
, template: _.template($('#tpl-nav-organization').html())
, initialize: function(){
_.bindAll(this, 'render');
this.collection.on('add', this.render);
}
, render: function(){
var $that = $(this);
var proxy = $.proxy(this.navigateTo, this, 'parameter to navigateTo')
// log point 1
console.log(proxy)
$.each(this.el.children, function(index, child) {
var navId = $(child).attr('id')
if(navId !== undefined) {
var navSelector = '#' + navId
var proxy = $.proxy(this.navigateTo, $that, 'parameter to navigateTo')
// log point 2
console.log(proxy)
$(navSelector).on('click',proxy);
}
})
}
, navigateTo: function(id) {
console.log(id)
}
}) ;
在“日志点 1”处,我记录了一个有效的函数:
function () {
return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
}
在“日志点 2”处,我记录了“未定义”。我试过这个
var $that = this
并在循环中传递它。这些都不起作用(没有双关语)。我意识到我的应用程序设计需要发展,但我试图在这种情况下理解这个问题。为什么不能为 NavigationView 类的 navigateTo 方法创建有效代理?
除了使代码工作的答案之外 - 我很想知道为什么。我怀疑在循环内部 this 对象是不同的上下文。但是为什么我不能事先存储该上下文并让它工作呢?