给定此HTML:
<div class="blah" id="div1">a</div>
<div class="blah" id="div2">b</div>我正在尝试使一个处理程序依赖于"this“的值,如下面的JavaScript代码所示:
$(document).ready(function() {
$(".blah").click(function() {
alert(this.id); }); });在Fay中怎么做?我没有找到API来做这件事。看起来不可能直接从main调用ffi:
main = ready $ do
select ".blah" >>= onClick (\_ ->
ffi "alert(this.id)")我得到“测试$ffi未定义”。我设法使用下面的代码调用了ffi:
alertthis = ffi "alert(this.id)"
main = ready $ do
select ".blah" >>= onClick (\_ ->
alertthis)但是现在"this“引用了一些Fay特定的对象,并且没有属性"id”。
发布于 2013-10-23 23:28:18
首先,你的ffi调用没有类型签名,或者做一个toplevel声明(我认为fay会在这方面给出一个错误,但也许它不会,应该解决这个问题):
alert :: sometype -> Fay ()
alert = ffi "alert(%1)"或者在表达式级别使用它:
(\_ -> (ffi "alert(%1)" :: sometype -> Fay ()) myThis))this在Fay函数中不可用,因为它不具有与js函数相同的表示形式,会发生一些转换,因此this会在此过程中丢失。
我们认为,依赖于绑定this是不好的。您没有给出onClick函数的定义,但是您在回调中忽略的参数可能包含具有target属性的事件对象。由于事件传播,这并不总是有效的,如果这是一个问题,您也可以将this传递给它,如下所示
onClick :: (Element -> Event -> Fay ()) -> JQuery -> Fay JQuery
onClick = ffi "%2.click(function (e) { %1(this, e); })"https://stackoverflow.com/questions/19477593
复制相似问题