QBO V3操作的行为顺序

QBO V3 Behavior order of operations

本文关键字:顺序 V3 操作 QBO      更新时间:2023-09-26

我遇到了一个创建"依赖"行为的问题,其中要依赖的对象是尚未加载的<option/>标记,因为它通过ajax调用加载。似乎存在一个竞争条件,其中依赖行为试图在ajax调用完成之前加载。下面是无法加载依赖行为的元素标记:

<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来创建这个依赖关系吗?

依赖行为支持绑定到一个选择标签的值,而不是一个选项标签:

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

依赖行为,在初始化时,将检查ProfessionalLicenseType的值,并发现它是空的,禁用/隐藏你的依赖div标签。它还将在ProfessionalLicenseType下拉列表中添加一个更改事件处理程序(qbo.dependencies .js第45行):

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

Dropdown行为将稍后(异步)通过AJAX加载您的选项,如果该行为的选项。选中即设置,将设置匹配选项。select =true (qbo.Dropdown.js line 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');

将触发依赖行为来重新评估依赖并做出适当的反应。