Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将名称数组传递给u.bindAll-Arguments列表的类型错误_Javascript_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 将名称数组传递给u.bindAll-Arguments列表的类型错误

Javascript 将名称数组传递给u.bindAll-Arguments列表的类型错误,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,我们在主干视图中使用通用模式。我们有这样的事件对象: var TokenInputBaseView = Backbone.View.extend({ events: { 'click .remove-token' : 'click_removeToken', 'mousedown .add-token': 'click_addToken', 'keydown input' : 'keydown_input', 'click input'

我们在主干视图中使用通用模式。我们有这样的事件对象:

var TokenInputBaseView = Backbone.View.extend({

  events: {
    'click .remove-token' : 'click_removeToken',
    'mousedown .add-token': 'click_addToken',
    'keydown input'       : 'keydown_input',
    'click input'         : 'click_input',
    'focus .token-input'  : 'focus_input',
    'blur .token-input'   : 'blur_input',
  },
几乎在所有情况下,我们都希望所有事件处理程序都绑定到视图,而不是它们的事件对象。所以我们这样做:

initialize: function(){
  _.bindAll(this, 'click_removeToken', ...);
}
我们必须手动列出每个事件名称。如果我们可以简单地传入一个数组,这将非常理想,但下划线不支持此用途:

_.bindAll(this, _.values(this.events));
下划线希望将各个名称作为参数而不是数组传入。但是,这也不起作用:

_.bindAll.apply(this, _.values(this.events).unshift(this));
Javascript给出了以下错误:

"Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type"

有什么好办法可以简化bindAll的使用,从而不需要手动列出所有要绑定的函数名吗?

您正在传递bindAll的返回值,即修改后数组的长度。您需要存储一个数组引用,修改它,然后将该引用传递给
apply
,或者使用其他一些技巧:

// note, no need to bind to `this`
_.bindAll.apply(null, [this].concat(_.values(this.events)));
举个简单的例子:

var target=document.querySelector('#target');
变量映射={
‘foo’:‘foo’,
“酒吧”:“酒吧”
};
函数C(){
this.value='value';
_.bindAll.apply(null,[this].concat(u.values(map));
}
C.prototype.foo=函数(){
log('hello',this);
target.textContent=this.value+'set by foo';
}
C.prototype.bar=函数(){
返回此.value;
}
var c=新的c();
文件。添加的文件列表器('click',c.foo)


单击我
您将传递的所有返回值,即修改数组的长度。您需要存储一个数组引用,修改它,然后将该引用传递给
apply
,或者使用其他一些技巧:

// note, no need to bind to `this`
_.bindAll.apply(null, [this].concat(_.values(this.events)));
举个简单的例子:

var target=document.querySelector('#target');
变量映射={
‘foo’:‘foo’,
“酒吧”:“酒吧”
};
函数C(){
this.value='value';
_.bindAll.apply(null,[this].concat(u.values(map));
}
C.prototype.foo=函数(){
log('hello',this);
target.textContent=this.value+'set by foo';
}
C.prototype.bar=函数(){
返回此.value;
}
var c=新的c();
文件。添加的文件列表器('click',c.foo)


单击我
您将传递的所有返回值,即修改数组的长度。您需要存储一个数组引用,修改它,然后将该引用传递给
apply
,或者使用其他一些技巧:

// note, no need to bind to `this`
_.bindAll.apply(null, [this].concat(_.values(this.events)));
举个简单的例子:

var target=document.querySelector('#target');
变量映射={
‘foo’:‘foo’,
“酒吧”:“酒吧”
};
函数C(){
this.value='value';
_.bindAll.apply(null,[this].concat(u.values(map));
}
C.prototype.foo=函数(){
log('hello',this);
target.textContent=this.value+'set by foo';
}
C.prototype.bar=函数(){
返回此.value;
}
var c=新的c();
文件。添加的文件列表器('click',c.foo)


单击我
您将传递的所有返回值,即修改数组的长度。您需要存储一个数组引用,修改它,然后将该引用传递给
apply
,或者使用其他一些技巧:

// note, no need to bind to `this`
_.bindAll.apply(null, [this].concat(_.values(this.events)));
举个简单的例子:

var target=document.querySelector('#target');
变量映射={
‘foo’:‘foo’,
“酒吧”:“酒吧”
};
函数C(){
this.value='value';
_.bindAll.apply(null,[this].concat(u.values(map));
}
C.prototype.foo=函数(){
log('hello',this);
target.textContent=this.value+'set by foo';
}
C.prototype.bar=函数(){
返回此.value;
}
var c=新的c();
文件。添加的文件列表器('click',c.foo)


单击“我”
上下文不应该仍然是
\uu
?@Mathletics否,
bindAll
实际上并没有使用任何引用
它是一个纯函数。如果您希望它的行为与调用
.bindAll()
完全相同,您应该将
设置为上下文。未来的版本可能需要它。上下文不应该仍然是
\uuu
?@Mathletics否,
bindAll
实际上没有使用任何对
的引用,这是一个纯函数。如果你想让它完全像调用
.bindAll()
一样,你应该将
\uu
设置为上下文。未来的版本可能需要它。上下文不应该仍然是
\uuu
?@Mathletics否,
bindAll
实际上没有使用任何对
的引用,这是一个纯函数。如果你想让它完全像调用
.bindAll()
一样,你应该将
\uu
设置为上下文。未来的版本可能需要它。上下文不应该仍然是
\uuu
?@Mathletics否,
bindAll
实际上没有使用任何对
的引用,这是一个纯函数。如果你想让它完全像调用
.bindAll()
一样,你应该将
\uu
设置为上下文。未来的版本可能需要它,没有必要这样做。主干将自动为从
事件
哈希调用的方法分配实例的上下文,无需这样做。主干将自动为从
事件
哈希调用的方法分配实例的上下文,无需这样做。主干将自动为从
事件
哈希调用的方法分配实例的上下文,无需这样做。主干将自动为从
事件
散列调用的方法分配实例的上下文