Ember.js 使用bindAttr创建动态字符串

Ember.js 使用bindAttr创建动态字符串,ember.js,handlebars.js,Ember.js,Handlebars.js,我想在一个对象上创建一个动态类名,并使用从模型中得到的值。其中一个键名为provider,其中包含“twitter”或“facebook”。我想做的是在提供者前面加上字符串“icon-”,这样得到的类就是icon-twitter或icon-facebook 这是我现在掌握的密码 Ember提供了一种在属性中包含静态字符串的方法,方法是在属性前面加上:。您可以看到,在本例中,我还添加了一个名为avatar icon的类。我已经尝试了:icon account.provider,它只产生了文本字

我想在一个对象上创建一个动态类名,并使用从模型中得到的值。其中一个键名为
provider
,其中包含“twitter”或“facebook”。我想做的是在提供者前面加上字符串“icon-”,这样得到的类就是
icon-twitter
icon-facebook

这是我现在掌握的密码


Ember提供了一种在属性中包含静态字符串的方法,方法是在属性前面加上
。您可以看到,在本例中,我还添加了一个名为
avatar icon
的类。我已经尝试了
:icon account.provider
,它只产生了文本字符串“icon account.provider”

响应 不错。我现在正在研究一个类似于你答案的解决方案。问题:此视图将在each循环的上下文中使用。如何传入要在视图中使用的当前项?我现在有这个:


{{#控制器中的每个帐户}
{{{查看“Social.AccountButtonView”}
{{/view}
{{/每个}}

是否可以这样做:


{{{#查看“Social.AccountButtonView”account=“account”}

我之前说过,
属性索引
将是一个合适的解决方案,但我错了。如前所述,在绑定给定
视图的
class
属性时,应使用
类名
类名绑定
。请参考以下样本:

App.ApplicationView = Em.View.extend({
    provider: 'Facebook',
    classNameBindings: 'providerClass',
    providerClass: function() {
        return 'icon-avatar icon-%@'.fmt(this.get('provider').toLowerCase());
    }.property('provider')
});
这将呈现以下HTML:

<div id="ember212" class="ember-view icon-avatar icon-facebook">
    <h1>App</h1>    
</div>

应用程序
这是一把小提琴:


(注意:fiddle链接到的是比RC更早的一个版本的Ember.js)

您不应该使用
attributeBindings
,您应该只使用
classNameBindings
。我担心他们会经常发生冲突。@ebryn你能再解释一下吗?诚实的问题:你说它们通常会冲突是什么意思?如果你想更新
class
属性,你应该使用
classNames
classNameBindings
属性,这些属性在
Ember.View
中公开。我相信当这些特性已经存在时,使用
attributeBindings:['class']
是一个坏主意。好的,我想我明白你的意思了,开发人员可以使用
attributeBindings
属性中包含“余烬视图”。为了让我更好地理解,什么时候可以使用
attributeBindings
。。。{{/view}}
。我相信在这种情况下,
account
将超出子视图的范围,因此在视图中,您可以将其称为
view.account