jquery - Fay JQuery 处理元素数组

标签 jquery fay

首选方法是什么?如何计算选择器选择的元素数量?

我能想到的一种方法是调用 JQuery 的 size:

size :: JQuery -> Fay Int
size = ffi "%1['size']()"

另一种方法是从函数调用中获取列表,然后对元素进行计数。检索元素的函数的类型可能是:

elems :: JQuery -> Fay [Elem]

有人知道如何实现吗?如何描述 javascript 类型和 haskell 类型之间的映射?

最佳答案

Fay 中有两种处理 javascript 对象的方法。

不透明数据类型

使用 EmptyDataDecls:

{-# LANGUAGE EmptyDataDecls #-}
[...]
data JQuery

这就是 fay-jquery 的作用,它允许库的用户轻松定义新的 FFI 绑定(bind),因此您的大小示例可以工作。但请注意,它在 jQuery 中已被弃用,因此最好按照 John B 的建议使用 length

每当 fay 遇到应属于 JQuery 类型的内容时,它都不会触及它,因此您将直接引用 javascript 对象。

记录

另一种方法是将 JavaScript 对象映射到记录,如果所讨论的对象很容易映射,例如在处理 JSON 或进行客户端-服务器通信时,这是更好的选择。

data User = User { name :: String }

userA :: User
userA = ffi "{ instance : \"User\", name : \"Adam\" }"

userB :: User
userB = User { name = "Adam" }

这些是构造用户记录的相同方法,但是 userA 当然有点做作,在这种情况下,可能会从服务器端或某些 JS 库获取值(否则没有理由使用 FFI完全)

在这种记录情况下,您将不会保留对 JS 对象的引用,将实例化一个不可变的用户记录。

我还认为您可以跳过返回类型中的Fay。我认为可以安全地假设 jQuery 对象不会发生变化,特别是如果它们是从 Fay 实例化的。

length :: JQuery -> Int
length = ffi "%1['length']"

另请参阅FFI wiki page .

编辑: 稍微相关,fay-uri是一个文档齐全且相当简单的示例,说明如何在可变 js 库之上构建不可变的 FFI 层。

关于jquery - Fay JQuery 处理元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196595/

相关文章:

haskell - 在 Fay 中将 Char 转换为 ASCII 码

javascript - IE 中的 jQuery $.get 问题

javascript - 如何从 getItemMetadata 返回变量?

javascript - 捕获 jQuery 表单提交事件

jquery - iOS Safari 调试控制台 - 如何获取错误的行号?

javascript - 动画不缓和

javascript - Haskell Fay 序列异步调用

javascript - Fay、渲染循环和鼠标事件