如@andorov's answer中所述,OP的理想代码(<div style="width:{{model.width}}">
现在几乎与Ember 1.10一样起作用
我是Ember.js的新手,我发现很难动态 改变CSS。这是一个解释我的意思的例子:
var App = Em.Application.create(); App.MyObj=Em.Object.extend({ objWidth:10 }); App.objController = Ember.ArrayController.create({ content: [], createObj: function(){ var obj = App.MyObj.create(); this.pushObject(obj); } });
以下代码不起作用,但它解释了我的目标。用一个 把手模板,我想完成这个:
{{#each obj in App.objController}} <div style="width:{{obj.objWidth}}"></div> {{/each}}
换句话说,我只想拥有
<div>
更新的宽度objWidth
属性更改时。
答案 0 :(得分:6)
style
属性必须与bindAttr
绑定,将样式作为一个整体传递,而不只是其中一个属性,因为它不明白。此属性仅允许您以字符串形式访问样式,以直接元素为目标。如果你这样定义它,就不可能绑定到样式的属性。
所以here's my sugestion:我创建了几个“模型”类,如下所示,实现了一个以像素为单位返回宽度的属性:
var WidthEnabledModel = Em.Object.extend({
width: 100,
unit: "px",
widthString: function() {
return 'width: %@%@'.fmt(this.width, this.unit);
}.property('width', 'unit')
});
App.SampleModel = WidthEnabledModel.extend({
itemName: ''
});
然后,对于集合中的每个项目,我将该属性绑定到style
属性:
<script type="text/x-handlebars" data-template-name="sample">
<div id="sample_area" style="width: 250px;">
{{#each thing in controller.content}}
<div class="item" {{bindAttr style="thing.widthString"}}>
{{thing.itemName}}<br />
{{thing.widthString}}
</div>
{{/each}}
<div>
</script>
按照我在jsfiddle http://jsfiddle.net/schawaska/ftWZ6/
制作完整代码的示例修改强> 我在小提琴中进行了一些更改以添加更多功能,但设置宽度的部分保持不变。
答案 1 :(得分:1)
您的原始解决方案style="{{dynamicStyleAttribute}}"
现在可以使用新的绑定属性语法 -
http://emberjs.com/blog/2015/02/07/ember-1-10-0-released.html#toc_bound-attribute-syntax
您需要在px
的值附加width:300px
,并在其上调用Ember.String.htmlSafe('your string')
。
请注意,仍有一些未解决的问题: https://github.com/emberjs/ember.js/issues/10783 https://github.com/emberjs/ember.js/issues/10870
答案 2 :(得分:0)
您是否尝试过创建视图并将其绑定到控制器?
例如:
在您的Javascript中:
App.objView = Ember.View.extend({
contentBinding : 'App.objController',
widthBinding : 'content.width'
});
在你的把手中:
{{#each Ember.App.objController}}
{{#view Ember.App.objView contentBinding="this"}}
<div style="width: {{width}};"></div>
{{/view}}
{{/each}}