2014-06-11 68 views
0

我遇到了一個問題,創建一個「依賴」行爲,其中依賴的對象是<option/>標記,因爲它通過ajax調用加載,所以尚未加載。在ajax調用完成之前,似乎有一個競爭條件,即依賴行爲試圖加載。下面是無法加載的元素標記依賴行爲:QBO V3操作的操作順序

<div class="control-group" data-behavior="Depend" data-depend-options="{{'depends': 'W9', 'required': true}}"> 

「W9」將是<option/>標籤的ID。此選項標記將由以下代碼加載:

<select name="ProfessionalLicenseType" id="ProfessionalLicenseType" class="required" data-behavior="Dropdown" data-dropdown-options="{{ 'type': 'ObjectType', 'data': {{ 'Object': 'ProfessionalLicense' }}, 'selected': '{AttachmentType}', 'id': 'ObjectType' }}"> 

我不應該使用HTML標記來創建依賴關係行爲嗎?我應該嘗試使用JavaScript來創建這種依賴關係嗎?

在此先感謝。

回答

0

的依靠行爲的支持綁定到一個選擇標記的值,而不是一個選項標籤:

<div class="control-group" data-behavior="Depend" data-depend-options="{{'depends': 'ProfessionalLicenseType=W9', 'required': true}}"> 

的依靠行爲,在初始化時,將檢查ProfessionalLicenseType的價值,並發現它是空的,禁用/隱藏你的依賴div標籤。它還將增加一個改變事件處理程序ProfessionalLicenseType下拉(qbo.Depends.js 45行):

source.addEvent('change', qbo3.dependencyCheck.pass([source, element, options, depends])); 

下拉行爲將在後面(異步),通過AJAX加載你的選擇,如果行爲的options.selected被設置時,將設置匹配option.selected =真(qbo.Dropdown.js線105):

if ((row[value] || row) == options.selected) { 
    target.options[target.options.length - 1].selected = true; 
    target.defaultIndex = target.options.length - 1; 
    target.fireEvent('change'); 
} 

的這個工作是target.fireEvent('change')如上所述;這將觸發Depend行爲來重新評估依賴關係並做出適當的反應。

+0

謝謝。像魅力一樣工作。 – GoldRusher49