Aurelia
是否支持可选绑定?我无法在任何地方找到这些信息。我遇到的问题是我有一个title
属性,可能会或可能不会填充在一个对象数组中。我使用repeat.for
和title.bind
,但如果此属性不是对象数组的一部分,我根本不希望该属性存在。这可能在Aurelia
吗?
将Bootstrap-Select
与空title
一起使用时会抛出错误。让Aurelia
动态创建属性可以解决我的问题。
到目前为止我的代码看起来像这样
<select class="selectpicker" value.bind="value" options.bind="options" disabled.bind="disabled">
<option repeat.for="option of options" model.bind="option"
data-subtext.bind="option.subtext"
title.bind="option.title">
${option.name}
</option>
在此示例中,我想将data-subtext
和title
作为可选属性。那是可行的吗?
由于这是一个自定义元素,我尝试删除对象title
的{{1}}属性,但这似乎不起作用。我也试过jquery,但又没有运气。
答案 0 :(得分:3)
在很多情况下我没有测试过这个,但我认为你也可以创建一个自定义绑定行为,如下所示:
export class OptionalBindingBehavior {
bind(binding, scope, interceptor) {
binding.originalupdateTarget = binding.updateTarget;
binding.originalTargetProperty = binding.targetProperty;
binding.updateTarget = val => {
if (val === undefined || val === null || val === '') {
binding.targetProperty = null;
} else {
binding.targetProperty = binding.originalTargetProperty;
}
binding.originalupdateTarget(val);
}
}
unbind(binding, scope) {
binding.updateTarget = binding.originalupdateTarget;
binding.originalupdateTarget = null;
binding.targetProperty = binding.originalTargetProperty;
binding.originalTargetProperty = null;
}
}
然后使用它:
<a href.bind="message & optional">${message}</a>
答案 1 :(得分:2)
您可以使用仅在属性存在时生成title
属性的自定义属性。例如:
export class OptionalTitleCustomAttribute {
static inject = [Element];
constructor(element) {
this.element = element;
}
valueChanged(newValue) {
if (newValue) {
this.element.setAttribute('title', newValue);
} else {
this.element.removeAttribute('title');
}
}
}
正在运行示例:https://gist.run/?id=f7f89f35b62acb5b4f05ffe59be1880e