这里第31行 - > https://github.com/benib/aurelia-hammer/blob/master/src/hammer-press.js
this.callback.call(null, { hammerEvent: event });
有人可以解释这个hammerEvent对象如何映射回调用aurelia视图模型中的$ event对象吗?
答案 0 :(得分:4)
有人可以解释这个hammerEvent对象如何映射回来 调用 aurelia视图模型中的 $ event 对象?
有一些事情要发生。
假设你在视图中使用它是这样的:
<div hammer-tap.call="handleTap($event)">
</div>
在编译hammer-tap
属性时,aurelia-templating-binding
将通过map the binding attributes的约定列表到正确的表达式。
根据您在syntax-interpreter中可以看到的.call
惯例,它被翻译为CallExpression
(位于aurelia-binding
)
当编译完成并且在组件上调用bind()
时,CallExpression
sets a delegate on the target会调用callSource
以及从目标获取的任何值(在您的示例:{ hammerEvent: event }
现在完全掩盖这一点有点棘手,因为Aurelia如何解决所有这一切的深度和递归,但是在某一行创建ListenerExpression createBinding
由{{aurelia-templating)
调用3 {}在ListenerExpression
中,它基本上为相关元素添加了一个事件监听器。
handleSwipe
会使用正确的事件调用锤子的hammerjs
方法。我认为实际上并不是在这个特定场景中发生的事情,因为作者似乎使用.on
的{{3}} .off
和hammerjs
。因此实际上handleSwipe
将该事件从常规事件侦听器传递给CallExpression
。
callSource
,.call
将最终调用绑定到$event
的函数,并传入从ListenerExpression
收到的hammerjs
(或set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
的处理程序)早些时候。希望这有点帮助。但正如你所看到的,它非常复杂:)
答案 1 :(得分:-1)
在Javascript函数中可以通过call
方法调用,原因函数可以是变量。
var p = function(x)
{
console.log('calling via Call method. arguments: ' + x);
}
现在,如果我想调用此函数,调用它的一种方法是使用如下的调用方法。
p.call(null,'test')
有关通话函数here的详细信息。
我认为通过锤子js inputHandler
和computeInputData
https://hammerjs.github.io/dist/hammer.js
希望有所帮助!
答案 2 :(得分:-1)
Javascript提供了三种调用函数的方法
假设你有一个功能
function foo() {
}
您只需使用括号foo()
call
Function.prototype
方法
醇>
好的,再次考虑foo
功能
但是这次你需要以不同的方式看待它,javascript中的每个函数也是一个对象,每个对象都有一个原型,然后可以有更多的功能和属性。因此,当您定义类似foo
的函数时,它也会成为Function
的对象,并为您提供另外两种方法来调用该函数,其中一种方法是call
,它要求第一个参数为您要传递给函数的上下文或this
然后以逗号分隔的参数列表。例如,您有一个具有属性firstName
和lastName
的用户对象,并且您希望具有对该用户说些什么的功能,您可以像这样定义函数
function saySomething(something) {
return "Hey " + this.firstName + " " + this.lastName} + " I wanted to say " + something
}
apply
Function.prototype
方法
醇>
与call
非常相似,除了不使用逗号分隔的args,您将传递一个数组。
此处有更多相关内容https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function