【问题标题】:JavaScript, MooTools and variable/object scopeJavaScript、MooTools 和变量/对象范围
【发布时间】:2010-01-07 21:48:10
【问题描述】:

我可能在这里使用了错误的模式,但如果我是,我希望有人能纠正我!

我有一个代表用户工作区的对象,它响应服务器操作,克隆一个 div,更改它的一些属性,将其放置在工作区上,使其可拖动并添加一个 onComplete 操作。此操作旨在调用工作区对象的另一个方法,将 div 的更新位置发送回服务器以进行布局持久性。

我已经将课程剥离到相关的方法:

var MooPanel = new Class( {
    createDiv: function() {
        var newDiv = existingDiv.clone();
        var dragHandle = newDiv.title;

        var move = new Drag(newDiv, {
            'handle':  dragHandle,
            'x': true,
            'y': true,
           /* original line: 
            'onComplete': function( el, dr ) { updateCoordinates( el, dr ); }
            */
           /* working line: */
            'onComplete': function( el, dr ) { this.updateCoords(el); }.bind(this)
        }
    },
    updateCoordinates: function( el, dr ) {
        send.to.server();
    }
});

现在,我无法让它调用我的 updateCoordinates 方法。我尝试了this 和其他关键字的各种组合,但不能完全正确。

拨打updateCoordinates的正确方法是什么?

【问题讨论】:

    标签: javascript events scope mootools draggable


    【解决方案1】:

    试试这个(双关语不是故意的):

    onComplete: function( el, dr ) { this.updateCoordinates( el, dr ) }.bind(this);
    

    在您的 onComplete 函数中 this 指的是 onComplete 函数本身。通过将函数绑定到您的类 this 然后引用类实例本身。

    【讨论】:

    • 太棒了,谢谢,我尝试了this.bind(this) 的各种组合,但始终没有正确,我现在编辑了答案以包含正确的行,谢谢!跨度>
    猜你喜欢
    • 2011-03-03
    • 2011-03-10
    • 2012-05-10
    • 2013-05-29
    • 1970-01-01
    • 2012-08-10
    • 2011-11-20
    • 2012-01-21
    • 2013-10-01
    相关资源
    最近更新 更多