Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何从handlebar模板向子视图添加css类_Ember.js - Fatal编程技术网

Ember.js 如何从handlebar模板向子视图添加css类

Ember.js 如何从handlebar模板向子视图添加css类,ember.js,Ember.js,我想从Handlebar模板向子视图添加css类。我目前收到一个错误,如下所示: Uncaught TypeError: Object [object DOMWindow] has no method 'get' App = Ember.Application.create() App.ParentView = Ember.View.extend({ foo: 'bar', content: 'Hello', ChildView: Ember.View.extend(

我想从Handlebar模板向子视图添加css类。我目前收到一个错误,如下所示:

Uncaught TypeError: Object [object DOMWindow] has no method 'get'
App = Ember.Application.create()

App.ParentView = Ember.View.extend({
    foo: 'bar',
    content: 'Hello',
    ChildView: Ember.View.extend({
        classNames: this.get('parentView').get('classesToAdd')
    })
});
我的代码如下:

Uncaught TypeError: Object [object DOMWindow] has no method 'get'
App = Ember.Application.create()

App.ParentView = Ember.View.extend({
    foo: 'bar',
    content: 'Hello',
    ChildView: Ember.View.extend({
        classNames: this.get('parentView').get('classesToAdd')
    })
});
我这里有一个JSFIDLE:


classNames属性将上下文从Ember.View转换为dom元素,这有什么特别之处吗?或者也许有其他方法可以实现这一点?

我不认为您可以在ChildView的
类名声明中使用
this
,因为视图对象尚未实例化


但是,您可以使用绑定。请参阅Emberjs.com上“自定义HTML元素”部分下的文档。

您可以覆盖视图上的
init
,以访问
classesToAdd
,请参阅

把手:

<script type="text/x-handlebars">
    {{#view App.ParentView}}
       {{#view ChildView classesToAdd="my-class"}}
            hello        
       {{/view}}
    {{/view}}
</script>​
App = Ember.Application.create()

App.ParentView = Ember.View.extend({
    foo: 'bar',
    content: 'Hello',
    ChildView: Ember.View.extend({
        init: function() {
            this._super();
            var classes = this.get('classesToAdd');
            this.set('classNames', Ember.makeArray(classes));
        }
    })
});​

实际上我已经试过了。我已经设置了classNamesBinding,但又出现了一个错误。谢谢。这基本上就是我想要实现的。我想把把手模板弄干。这里有一个更加枯燥的JSFIDLE:-不需要在模板中声明childView。需要注意的一点是:我后来意识到,通过更具创造性地使用css选择器,我可以达到同样的效果。(只需在parentView上声明一个类,然后沿着div.my-class div{{#…css attributes}行创建一个选择器即可)。但这使我的css更干净。需要注意的是,这样设置类会破坏子视图的事件处理,因为常规的ember视图类不会添加到类名数组中,而是替换了该数组。下面是一个可能的解决方案的更新版本:下面是对该问题的进一步讨论: