65.9K
CodeProject 正在变化。 阅读更多。
Home

jLinq(JSON 的 LINQ)屏幕录像 #2 –创建您自己的扩展方法

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (2投票s)

2009年7月8日

CC (ASA 2.5)

1分钟阅读

viewsIcon

20050

jLinq (JSON 的 LINQ) 是一个完全可扩展的库,允许您创建自己的查询方法并将其附加到核心库。本屏幕录像介绍了创建您的第一个扩展方法的一些基本知识。

jLinq 是一个 Javascript 库,允许您使用 LINQ 风格的查询处理 JSON 数据。

您知道 jLinq 允许您使用自己的方法扩展基础库吗?您是否意识到您创建的任何方法都可以直接插入并与内置的 jLinq 功能协同工作?

本屏幕录像介绍了创建 jLinq 的第一个扩展方法的一些基本知识。

创建查询方法

Query 方法决定了哪些记录保留以及哪些记录从 jLinq 查询中删除。以下是扩展方法的外观示例

jLinq.extend({
    name:"evenValues", //the name of this method
    type:"query", //the kind of method this is
    count:0, //how many parameters we expect
    method:function(query) {	

        //determine how to evaluate the value being compared
        var compare = query.when({
            "string":function() {
                return query.value.length;
            },
            "array":function() {
                return query.value.length;
            },
            "other":function() {
                return query.helper.getNumericValue(query.value);
            }
        });		

        //the actual comparison
        return compare % 2 == 0;
    }
});

您会注意到,我们提供了此新方法的名称、方法类型(在本例中为 query 方法)、预期的参数数量(不包括字段名称),然后是用于确定是否保留记录的实际方法。

如果您不完全理解这如何工作,那么您可能需要观看本文末尾的屏幕录像,以逐步了解其工作原理。

运算符命名

本屏幕录像还解释了运算符命名。当您扩展 query 方法时,jLinq 还会添加几个其他带有运算符前缀的名称方法。这些方法在被使用时都会执行正确的切换。例如…

//this method is one way to do it
jLinq.from(data.users)
    .less("age", 30)
    .or()
    .evenValues()
    .select();

//this method was generated automatically - saves us a step!
jLinq.from(data.users)
    .less("age", 30)
    .orEvenValues()
    .select();

当然,如果您将方法命名为 orHasSomeValue() 之类的内容,那么您最终会得到一些奇怪命名的运算符方法(例如 orOrHasSomeValue())。

很简单——差不多

扩展方法一开始有点令人困惑,但创建第一个扩展方法后,您应该就能上手了。 此屏幕录像 将帮助您入门。

© . All rights reserved.