注意:此方案与此问题中的方案相同:Data binding parent-child relationships in Aurelia
用法:
<form role="form" id="formShipment" breeze-validation.bind="shipment">
<widget-picker widget.bind="shipment.widget" widgets.bind="widgets"></widget-picker>
</form>
插件-picker.js
import {bindable, bindingMode} from 'aurelia-framework';
export class WidgetPicker {
@bindable({ defaultBindingMode: bindingMode.twoWay }) widget;
@bindable widgets;
}
插件-picker.html
<select value.bind="widget">
<option repeat.for="widget of widgets" model.bind="widget">${widget.name}</option>
</select>
<!-- Some other UI stuff that I would rather not turn red if the above fails validation-->
我正在尝试构建一个组件化的UI,并且有一个控件/元素来控制选择一个Widget(widget-picker
)。
但是我也需要知道shipment.widget
是必需的(并在小部件控件上显示它。)
但有两件事阻止了这一点。
subscribe
方法仅查看具有breeze-validation自定义属性的视图上的绑定。通过查看视图的控制器视图(并获取绑定),可以很容易地解决这个问题: this.view.controllers.forEach(function (controller) {
if (controller.view) controller.view.bindings.forEach(function (binding) {
existingListOfCurrentViewsBindings.push(binding)
})
})
shipment.widget
通过了@bindable
,因此它没有source
属性。这意味着即使aurelia-validation查看了子自定义元素,查找breeze属性的当前方法也会失败。有没有办法让aurelia-breeze支持验证自定义元素(在失败的控件上)?
注意:我可以在一般验证区域中显示验证,但由于我的大多数UI都是以自定义元素运行,因此我几乎可以使用所有UI。这不像用户友好的那样接近控制失败的东西。