首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Fay中获取this对象?

如何在Fay中获取this对象?
EN

Stack Overflow用户
提问于 2013-10-20 20:57:32
回答 1查看 180关注 0票数 1

给定此HTML:

代码语言:javascript
复制
  <div class="blah" id="div1">a</div>
  <div class="blah" id="div2">b</div>

我正在尝试使一个处理程序依赖于"this“的值,如下面的JavaScript代码所示:

代码语言:javascript
复制
$(document).ready(function() {
  $(".blah").click(function() {
    alert(this.id); }); });

在Fay中怎么做?我没有找到API来做这件事。看起来不可能直接从main调用ffi:

代码语言:javascript
复制
main = ready $ do
  select ".blah" >>= onClick (\_ ->
    ffi "alert(this.id)")

我得到“测试$ffi未定义”。我设法使用下面的代码调用了ffi:

代码语言:javascript
复制
alertthis = ffi "alert(this.id)"
main = ready $ do
  select ".blah" >>= onClick (\_ ->
    alertthis)

但是现在"this“引用了一些Fay特定的对象,并且没有属性"id”。

EN

回答 1

Stack Overflow用户

发布于 2013-10-23 23:28:18

首先,你的ffi调用没有类型签名,或者做一个toplevel声明(我认为fay会在这方面给出一个错误,但也许它不会,应该解决这个问题):

代码语言:javascript
复制
alert :: sometype -> Fay ()
alert = ffi "alert(%1)"

或者在表达式级别使用它:

代码语言:javascript
复制
(\_ -> (ffi "alert(%1)" :: sometype -> Fay ()) myThis))

this在Fay函数中不可用,因为它不具有与js函数相同的表示形式,会发生一些转换,因此this会在此过程中丢失。

我们认为,依赖于绑定this是不好的。您没有给出onClick函数的定义,但是您在回调中忽略的参数可能包含具有target属性的事件对象。由于事件传播,这并不总是有效的,如果这是一个问题,您也可以将this传递给它,如下所示

代码语言:javascript
复制
onClick :: (Element -> Event -> Fay ()) -> JQuery -> Fay JQuery
onClick = ffi "%2.click(function (e) { %1(this, e); })"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19477593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档