2015-09-20 66 views
0

我是JavaScript新手,主要關注Java/PHP開發。我過去構建的JS應用程序非常黑客,無法測試,並且不可擴展。動態實例化對象(Mistic查詢生成器)

我現在正在嘗試創建一個以更合適的方式與數據接口的應用程序。基本上,我正在構建用於創建支持團隊和最終用戶可以訪問的規則/操作的用戶界面。該應用程序的邏輯包含大量的布爾邏輯運算符,只需要滿足一些任意的條件集合,然後應用某些操作。

所以,我已經解決了查詢生成器類型的應用程序,我喜歡Mistic's work。不幸的是,我們沒有一個Node.js服務器。所以,我已經開始設法使用vanilla JS/jQuery來完成這項工作。一次迭代使用Knockout.js。但是,我發現API很難合作。

現在,我發現這個JSFiddle,它使用Mistic的獨立版本。我更願意使用它,但是我不能完全一致的是如何動態地創建多個查詢構建器。 (規則將出現在第二個鏈接所示的表格中,我需要添加行按鈕)。

$('#builder').queryBuilder({ 

sortable: true, 

filters: [{ 
    id: 'core_ID', 

我使用jQuery .each()函數來創建綁定到一個類生成的每個元素查詢生成器試過,但無濟於事。

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

你們可以告訴我如何動態創建新的QueryBuilder對象,如第三個鏈接所示?

回答

1

您使用.builder作爲選擇器,這意味着您選擇全部具有class="builder"屬性的元素。

如果是這樣,那麼你應該能夠只是調用$('.builder').queryBuilder(...,它應該使用有類builder

編輯的所有元素:它實際上這樣做。但是cakephp查詢生成器不允許它(無論什麼原因)。所以你以我所描述的方式使用each

,如果你想使用each功能,你會到會這樣:

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

說明:

$(".builder")選擇具有一個class="builder"屬性的所有元素。 .each遍歷這些元素。函數內部傳遞給eachthis包含本地DomElement(它不是一個jQuery元素)。因此$(this)獲取DomElement的jQuery元素,並調用.queryBuilder。

你幾乎可以在任何jQuery元素上調用.queryBuilder,除非它是一個元素數組(它會引發錯誤)。

所以基本上任何選擇器+每個在我使用它的方式應該工作。

這裏是用4個querybuilders你的榜樣工作小提琴:http://jsfiddle.net/ap9gxo4L/42/

+0

非常感謝。 – JonasJSchreiber

+0

我明白你說$(this)是jQuery元素和DOM元素的範圍機制,但是你將如何專門訪問QueryBuilder對象? 問題是單擊運行按鈕時生成的JSON似乎與期望值不一致。我很滿意它在一個元素或全部四個元素上運行,但它似乎正在訪問它返回的JSON中的更高級別層次結構。 – JonasJSchreiber

+0

好的,我認爲我已經過去了這個問題,我只是針對特定的建設者的ID。但是,我將如何去獲得額外的構建器來渲染?我有這個jsfiddle設置:http://jsfiddle.net/ap9gxo4L/45/ – JonasJSchreiber