2012-01-31 36 views
2

我真的很喜欢underscore mixin数据查询,underscore-data。这对我目前正在进行的一个项目来说是完美的。但是要么我不能让它工作,要么我不知道如何使用该工具,RQL implementation如何使用下划线数据(以前称为underscore.query)

pc = { 
    columns: [ 
    { 
     title: "3column-left", 
     text: "text", 
     image: null 
    } 
    ] 
} 

我要测试是否/列/列/文本存在。但是,我可以让图书馆提供真实或虚假的价值。例如,这两个查询返回原pc对象:

_.query(pc, 'columns&columns/text') 
_.query(pc, 'columns&columns/fubar') 

试图测试给定值时,这是同样的事情。这两个查询都会返回原始对象,尽管第二个查询不应返回任何内容。

_.query(pc, 'columns/title', '3column-left') 
_.query(pc, 'columns/title', 'doesntExist') 

任何洞察力的赞赏。

回答

0

这里的问题是,你引用textcolumns的属性,而不是columns的元素的性质(columns是一个数组)

之一。为了解决这个问题,你就必须构建你RQL如下:

旁白:用户还可以利用正则表达式:

_.query(pc, 'columns/0/title=re:left'); // exists 
_.query(pc, 'columns/0/title=re:right'); // doesn't exist 

这种方法有明显的限制,必须知道你想查询的对象的数组索引。

基本信息可以在这里找到:https://github.com/dvv/underscore-data/blob/master/README-rql.md,遗憾的是没有提及数组访问。

更新: 值得一提的是,在_.query功能的第三个参数用于选项,以便用它喜欢:

_.query(pc, 'columns/title', '3column-left') 

不会产生你想要的效果。

+0

感谢您的反馈。但是这些查询不起作用。将文本引用为列的属性不是问题。因此,请参阅[下划线数据自述文件](https://github.com/dvv/underscore-data/blob/master/README-rql.md)中的第一个示例。 (a = 1,b:2},{a:3,b:2}],'(a = 1 | b = 2)')=== [{a:1,b :2},{a:3,b:2}]'。请注意,该查询未引用a = 1或b = 2应位于数组的第一个元素中的事实。这会挫败查询的目的,目的是找到这个元素。所以使用你的查询,我得到空的结果。 – Nutritioustim 2012-03-21 14:50:01

+0

我不清楚你在查询中想达到什么目的。 “a = 1或b = 2应该在数组的第一个元素中”是什么意思? – jlb 2012-03-22 11:18:30

+0

Heyya。对,所以我给出的查询是该自述文件中的第一个示例。并且查询'(a = 1 | b = 2)'应该对数据结构'[{a:1,b:2},{a:3,b:2}]'进行操作。你说我必须知道索引才能查询结构。我说这打破了查询的目的。我实际上向作者提交了一个错误报告。 [见这里](https://github.com/dvv/underscore-data/issues/1)。希望这是有道理的。希望作者修复它,因为这将是一个很好的工具。 – Nutritioustim 2012-03-22 23:50:31