将多个属性绑定到同一元素

时间:2014-02-21 09:59:50

标签: ember.js

我正在尝试做这样的事情:

<a href="#/{{unbound goto}}" {{bind-attr class=":menu-entry-text :nowrap active:selected-menu-entry-text"}} {{bind-attr id="active:active-nav:inactive-nav"}} {{bind-attr data-goto="goto"}}>

但只有第一个属性(class)被设置:iddata-goto未定义。是否可以在同一元素中使用bind-attr设置多个属性?怎么样?

1 个答案:

答案 0 :(得分:1)

是的,您可以通过使用多个bind-attr帮助程序一次绑定多个属性,或者只将所有属性放在一个bind-attr帮助程序中。但是,您的示例中存在问题,这就是为什么事情没有按预期工作的原因。

您用于class属性的“value if true”表单不能应用于其他类型的属性。必须将所有其他属性绑定到控制器上的动态属性。例如,如果您的控制器看起来像这样:

App.MyController = Ember.ObjectController.extend({
  myId: function() {
    if (this.get("active") === true) {
      "active-nav"
    } else {
      "inactive-nav"
    }
  }.property("active")
});

然后你会像这样绑定它:

<a href="#/{{unbound goto}}" {{bind-attr id="myID"}}>

就这个例子而言,如果你有一个HTML元素的动态ID,它可能是一个代码味道。 ID应该唯一地标识单个元素,我不希望它们发生变化。看起来这个类似乎更适合这个用例。