我是一个相对的Ember新手,所以我可能会遗漏一些明显的东西。我正在尝试为Bootstrap手风琴构建自定义视图。我正在使用相对视图,虽然它正在工作,但我想了解我是否可以简化一点。具体来说,我想知道是否可以使嵌入式href
的{{1}}计算属性依赖于嵌入式toggleView
的{{1}}这里是顶级视图,这是一个集合:
elementId
项视图对应于具有bodyView.
css类的DOM元素。
App.AccordionView = Em.CollectionView.extend({
headingTemplateName: 'accordion-heading',
innerTemplateName: 'accordion-inner',
tagName: 'div',
classNames: ['accordion'],
contentBinding: 'controller.content',
请注意,我已将accordion-group
属性视为项目视图中的 itemViewClass: Em.View.extend({
tagName: 'div',
classNames: ['accordion-group'],
target: null,
template: Em.Handlebars.compile("{{view view.headingView contentBinding='view.content'}}{{view view.bodyView viewName='bodyViewInstance' contentBinding='view.content'}}"),
headingView: Em.View.extend({
tagName: 'div',
template: Em.Handlebars.compile("{{view view.toggleView contentBinding='view.content'}}"),
classNames: ['accordion-heading'],
toggleView: Em.View.extend({
tagName: 'div', // Can be an 'a'
templateNameBinding: 'parentView.parentView.parentView.headingTemplateName',
classNames: ['accordion-toggle'],
attributeBindings: ['dataToggle:data-toggle', 'dataParent:data-parent', 'href'],
dataToggle: 'collapse',
dataParent: function() {
return this.get('parentView.parentView.parentView.elementId');
}.property(),
字段。
href
将target
嵌入式视图实例插入DOM时设置此字段。
href: function() {
return "#" + this.get('parentView.parentView.target');
}.property('parentView.parentView.target')
})
}),
bodyView: Em.View.extend({
tagName: 'div',
template: Em.Handlebars.compile("{{view view.innerView contentBinding='view.content'}}"),
classNames: ['accordion-body', 'collapse'],
这一切都有效。但是,我想在bodyView
:
didInsertElement: function() {
this.get('parentView').set('target', this.get('elementId'));
},
innerView: Em.View.extend({
tagName: 'div',
classNames: ['accordion-inner'],
templateNameBinding: "parentView.parentView.parentView.innerTemplateName"
})
})
})
});
当我这样做时,我收到以下错误,我不确定我理解为什么:
toggleView
有没有办法完成我想要做的事情?