1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 Form-binder v0.9.0 发布,微型数据绑定 下载

本帖由 漂亮的石头2015-04-13 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,020
    赞:
    46
    Form-binder v0.9.0 发布了。主要是改动了 `FormBinder.bind` 的方法签名。

    这一改动会对普通用户的使用方式造成一些影响:

    原来的应用代码是这样的


    import com.github.tminglei.bind.simple._

    val binder = expandJsonString("body", Some("json")) >-: FormBinder(messages)

    val mappings = tmapping(
    "id" -> long(),
    "json" -> tmapping(
    "email" -> required() >+: text(email()),
    "price" -> (cleanPrefix("$") >-: float()),
    "count" -> number().verifying(min(3), max(10))
    ).label("xx").verifying { case (label, (email, price, count), messages) =>
    if (price * count > 1000) {
    Seq("" -> s"$label: $price * $count = ${price * count}, too much")
    } else Nil
    }
    )

    val data = Map(
    "id" -> "133",
    "body" -> """{"email":"test@example.com", "price":"$137.5", "count":5}"""
    )
    binder.bind(mappings, data) { case (id, (email, price, count)) =>
    //do something here ...
    }


    现在会变成这样


    import com.github.tminglei.bind.simple._

    val binder = expandJsonString("body", Some("json")) >-: FormBinder(messages)

    val mappings = tmapping(
    "id" -> long(),
    "json" -> tmapping(
    "email" -> required() >+: text(email()),
    "price" -> (cleanPrefix("$") >-: float()),
    "count" -> number().verifying(min(3), max(10))
    ).label("xx").verifying { case (label, (email, price, count), messages) =>
    if (price * count > 1000) {
    Seq("" -> s"$label: $price * $count = ${price * count}, too much")
    } else Nil
    }
    )

    val data = Map(
    "id" -> "133",
    "body" -> """{"email":"test@example.com", "price":"$137.5", "count":5}"""
    )
    binder.bind(mappings, data).fold(
    errors => errors,
    { case (id, (email, price, count)) =>
    //do something here ...
    }
    )


    注:在 bind 以后的使用代码需要做些调整。

    ----------------------------------------------

    原来的接口是可以处理 errors 的,通过 ErrProcessor,但新的接口无疑更灵活些;可以通过配置 ErrProcessor 统一做些预处理,真正绑定后在具体运行环境中再做最终处理。

    另外,我正在把 form-binder 和 Scalatra 的集成文档添加进 Scalatra Guide,如果顺利,不久就可以在 Scalatra 官网的文档里见到它了。


    form-binder 是一个容易使用和定制的微型数据绑定和校验框架。

    它有如下特点:


    • 非常轻量,总共才 700 多行代码(框架 + 内置扩展)


    • 容易使用,使用过程没有冗余代码,所见及所得


    • 高度可定制,你可以扩展几乎每一个执行点


    • 容易扩展,每个扩展接口都只是一个 FunctionN 的别名


    • 不可变性,让你可以安全的共享/(嵌套)复用 mapping定义对象

    Form-binder v0.9.0 发布,微型数据绑定下载地址
     
正在加载...