我是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/