我是JavaScript的新手,主要关注Java / PHP开发。我过去构建的JS应用程序非常骇人,不可测试且不可扩展。

我现在正在尝试创建一个以更合适的方式与数据交互的应用程序。基本上,我正在构建一个用户界面,以创建我们的支持团队和最终用户可以访问的规则/操作。应用程序的逻辑包含许多布尔和逻辑运算符,只需要满足一些任意条件集,然后将应用某些操作。

因此,我几乎决定使用查询生成器类型的应用程序,并且我喜欢Mistic's work。不幸的是,我们没有Node.js服务器。因此,我着手寻找使用香草JS / jQuery实现此功能的方法。一次迭代使用了Knockout.js。但是,我发现API很难使用。

现在,我找到了这个JSFiddle,它在独立版本中使用了Mistic的作品。我更喜欢使用它,但是我不能拼凑的一件事是如何动态创建多个查询生成器。 (规则将显示在表格中,如第二个链接所示,我需要一个“添加行”按钮)。

$('#builder').queryBuilder({

sortable: true,

filters: [{
    id: 'core_ID',


我尝试使用jQuery .each()函数来创建查询生成器,这些查询生成器绑定到具有一类生成器的每个元素,但无济于事。

$.each('.builder').queryBuilder({


你们可以告诉我如何动态创建新的QueryBuilder对象,如第三个链接所示吗?

最佳答案

使用.builder作为选择器,这意味着您将选择所有具有class="builder"属性的元素。

如果是这样,那么您应该能够只调用$('.builder').queryBuilder(...,并且它应该使用所有具有类builder的元素。

编辑:实际上是这样做的。但是cakephp查询构建器不允许这样做(无论出于何种原因)。因此,您必须以我所描述的方式使用each

如果要使用each函数,您将需要这样:

$( ".builder" ).each(function() {
  $( this ).queryBuilder(...);
});


说明:

$(".builder")选择具有class="builder"属性的所有元素。
.each遍历那些元素。传递给each this的函数内部包含本机DomElement(这不是jquery元素)。因此,$(this)获取DomElement的jQuery元素,并在其上调用.queryBuilder。

您可以在几乎所有jQuery元素上调用.queryBuilder,除非它是元素数组(它将引发错误)。

因此,基本上任何选择器+使用我使用它的方式都应该起作用。

这是使用4个querybuilders的示例的有用的提琴手:http://jsfiddle.net/ap9gxo4L/42/

07-25 22:02
查看更多