正如提到@ andorov的回答中,OP的理想代码( <div style="width:{{model.width}}">
现在非常简单,只是工作方式灰烬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
属性被改变。
该style
酒店与约束bindAttr
,通过将样式作为一个整体 ,不只是属性之一,因为它不明白。 此属性仅允许您访问的风格作为一个字符串,瞄准眼前的元素。 这是不可能的,如果你把它定义这样的绑定到样式的属性。
所以, 这里是我的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/
编辑:我做的小提琴一些改变,增加更多的功能,但设置宽度的部分保持不变。
你原来的解决方案style="{{dynamicStyleAttribute}}"
现在工作,与新的绑定属性语法- http://emberjs.com/blog/2015/02/07/ember-1-10-0-released.html# toc_bound属性语法
您将需要一个追加px
的值width:300px
,并调用Ember.String.htmlSafe('your string')
上它。
需要注意的是还存在一些尚未解决的问题: https://github.com/emberjs/ember.js/issues/10783 https://github.com/emberjs/ember.js/issues/10870
您是否尝试过创建一个视图并将其绑定到控制器?
例如:
在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}}