Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 下划线bindAll:保留';这';上下文_Javascript_This_Underscore.js - Fatal编程技术网

Javascript 下划线bindAll:保留';这';上下文

Javascript 下划线bindAll:保留';这';上下文,javascript,this,underscore.js,Javascript,This,Underscore.js,当调用onSubmit时,我在试图将uploader保存为此上下文时遇到问题。任何JS大师都能帮忙吗 uploader: { init: function(){ var that = this; var fileUploader = new Uploader.FileUploaderBasic({ button : $("#upload-btn")[0],

当调用
onSubmit
时,我在试图将
uploader
保存为
上下文时遇到问题。任何JS大师都能帮忙吗

uploader: {

        init: function(){
            var that = this;

            var fileUploader = new Uploader.FileUploaderBasic({
                    button      : $("#upload-btn")[0],
                    action      : "/filesCollection",
                    onSubmit    : that.onSubmit
                });

            _.bindAll(this, this.onSubmit); // attempting to bind 'this'
        },


        onSubmit: function(id, fileName){
            console.log(this); // still refers to 'fileUploader' object :(
        }

}
导致以下错误:

Uncaught TypeError: Cannot read property 'bind' of undefined

示例:

通过使用
调用
应用
可以为任何函数指定
的上下文。这应该可以做到(在fileUploader声明中):

编辑:更新的JSFIDLE:

问题已解决:

我发现了几件重要的事情:

Uncaught TypeError: Cannot read property 'bind' of undefined
  • 在分配函数之前,必须调用
    \uuu0.bindAll()
  • 第一个参数必须是要绑定的对象或
  • 后面的参数必须是对象中存在的函数的名称(
    this
    ),并且必须是字符串形式
  • 如果要绑定对象(
    this
    )中的所有函数,请省略任何函数名,并将对象(
    this
    )作为唯一参数,例如
    \uuuu.bindAll(this)

  • 希望这能帮助一些像我一样困惑的人

    你能在JSFIDLE中演示一下吗?这不就是这么做的吗:。我不认为apply()是必要的。不,它不完全一样
    apply
    将参数列表作为数组,并正常地将参数发送给函数。但是,有很多方法可以解决这个问题,并非所有的方法都需要应用
    。我很想理解为什么在这个例子中,.bindAll()方法不起作用。我遇到了关于
    .bind
    .bindAll
    的非常好的解释:
    .bindAll(this)
    从下划线1.4.4开始不再起作用。使用
    \uu.bindAll.apply(,[this].concat(,.functions(this))似乎工作得很好()