Ember.js 在ember中以兄弟元素为目标的正确方法是什么?

Ember.js 在ember中以兄弟元素为目标的正确方法是什么?,ember.js,Ember.js,我目前的方法是有效的,但它依赖于jQuery,而不是直接针对元素。这感觉不太理想。在余烬有没有标准的方法 App.facetGroup = Em.View.extend({ templateName: "facet-group", actions: { showList: function(e) { var id = '#' + this.get('elementId'); $(id).children('.facets-list').slideToggl

我目前的方法是有效的,但它依赖于jQuery,而不是直接针对元素。这感觉不太理想。在余烬有没有标准的方法

App.facetGroup = Em.View.extend({
  templateName: "facet-group",
  actions: {
    showList: function(e) {
      var id = '#' + this.get('elementId');
      $(id).children('.facets-list').slideToggle(100)
    }
  } 
});
facet组
模板:

<h3 {{action showList target="view"}} class="facet-group-heading">{{view.displayName}}</h3>

// Facet lists are hidden by default 
<ul class="facets-list">
  {{#each view.facets }}
    {{view this}}
  {{/each}}
</ul>
{{view.displayName}
//默认情况下,面列表是隐藏的
    {{{#each view.facets} {{查看此} {{/每个}}

创建一个包含两个子视图[h3..]和[ul..]的ContainerView不是更好吗?您还可以使用this.$()而不是this.get('elementId')以视图的jquery元素为目标

编辑:

像这样的方法应该会奏效:

App.FacetGroupView = Ember.ContainerView.create({
  childViews: ['header', 'list'],
  header: Ember.View.create(
    tagName: 'h3',
    // templateName: 'facet-group/header' or
    template: Ember.Handlebars.compile('
      {{view.displayName}}
    '),
    classNames: ['facet-group-heading'],
    click: function() {
      // Access the list view element
      this.list.$().slideToggle(100);
    }
  )
  list: Ember.View.create(
    tagName: 'ul',
    classNames: ['facets-list'],
    // templateName: 'facet-group/list' or
    template: Ember.Handlebars.compile('
      {{#each view.facets}}
        {{view this}}
      {{/each}}
    '),
     didInsertElement: function() {
       // Hide facet list by default
       this.$().hide();
     }
  )
});

您还可以像这样针对兄弟姐妹

actions: {
  showList: function() {
     this.$('.facets-list').slideToggle(100)
  }
}
演示