Aurelia,如何进行可选绑定

时间:2017-03-08 05:47:12

标签: javascript aurelia aurelia-binding

Aurelia是否支持可选绑定?我无法在任何地方找到这些信息。我遇到的问题是我有一个title属性,可能会或可能不会填充在一个对象数组中。我使用repeat.fortitle.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-subtexttitle作为可选属性。那是可行的吗?

由于这是一个自定义元素,我尝试删除对象title的{​​{1}}属性,但这似乎不起作用。我也试过jquery,但又没有运气。

2 个答案:

答案 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