Ember.js - 更新CSS宽度基于对象属性(Ember.js - Update CSS wi

2019-09-24 04:09发布

正如提到@ 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属性被改变。

Answer 1:

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/

编辑:我做的小提琴一些改变,增加更多的功能,但设置宽度的部分保持不变。



Answer 2:

你原来的解决方案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



Answer 3:

您是否尝试过创建一个视图并将其绑定到控制器?

例如:

在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}}


文章来源: Ember.js - Update CSS width based on an object property