首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fay JQuery处理元素数组

Fay JQuery处理元素数组
EN

Stack Overflow用户
提问于 2013-04-24 23:52:04
回答 1查看 338关注 0票数 3

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

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

代码语言:javascript
复制
size :: JQuery -> Fay Int
size = ffi "%1['size']()"

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

代码语言:javascript
复制
elems :: JQuery -> Fay [Elem]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 01:11:58

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

不透明的数据类型

使用EmptyDataDecls:

代码语言:javascript
复制
{-# LANGUAGE EmptyDataDecls #-}
[...]
data JQuery

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

每当fay遇到应该是JQuery类型的东西时,它都不会接触到它,所以您将有一个对javascript对象的直接引用。

记录

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

代码语言:javascript
复制
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实例化的时候。

代码语言:javascript
复制
length :: JQuery -> Int
length = ffi "%1['length']"

另请参阅FFI wiki page

编辑:略有关联,fay-uri是一个文档完整且相当简单的示例,它展示了如何在可变的js库上构建一个不可变的FFI层。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16196595

复制
相关文章

相似问题

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