应该有一个 [dojo] 障碍在我头晕目眩?

Should there by a [dojo] hitch in my giddy-up?

我正在使用一些自定义的 Dojo 小部件,但我一直觉得自己是众所周知的柔术演员,通过在他们的头上伸手两次来挠他们的耳朵。出于某种原因,我对 dojo.hitch() 的使用感觉不对。

这是有效的:

myObject = {
    one: function() {
        promise = new Deferred();
        promise.then(dojo.hitch(this, function() { this.two(); }));
    },
    two: function() {
        // Func 2 stuff
    }
}
myObject.one();

...不过看起来应该更简单。

显然 promise.then(this.two); 会导致 Func 2 过早关闭,但是我一直在做的 dojo.hitch(...) 的冗长乏味似乎有点过头了。

this 的方法 link 转换为同一对象中其他地方的 .then() 函数的最简单或最正确的方法是什么?

dojo.hitch(this, function () { this.two(); })) 绝对可以通过几种方式进行简化。

最直接的简化是 dojo.hitch(this, this.two)

这与上面的效果相同,少了一个函数定义,而是将two函数直接传递给hitch。 (this.two 只引用函数,不执行函数,因为引用后没有括号。)

更简洁的简化是dojo.hitch(this, 'two')

这在技术上与前两个略有不同,因为它实现了后期绑定,因为 two 将在调用生成的函数时查找,而在前两个示例中,它将在调用 hitch 生成函数后立即查找。

hitch and partial tutorial 也可能有帮助。