目前我正在构建一个ember.js组件,它有2种模式,显示和编辑。当组件处于显示模式时,它以内联方式呈现模板字符串,该字符串是关联模型的属性。在编辑模式下,组件在可编辑的内容中显示模板字符串。我必须让组件在模式切换时重新初始化,方法是将组件的两个实例放在一个模板if/else语句中。我的组件中的以下代码实现了这一点:
`import layoutDefault from '../templates/components/positionable-element-default'`
.
layout:Em.computed(->
if @.get('layoutComponent.displayMode')
Ember.HTMLBars.compile(@.get('regionModel.textContent'))
else
layoutDefault
)
我的想法是解决render无法剥离模板字符串的{和}字符,然后在警告用户错误后重新编译。
我试着把编译函数放在一个try catch中,但是没有捕获到任何东西,大概是因为问题不在于编译,而在于渲染。
在一些研究中,我发现了Why Ember.onerror() not capturing the Assertion Failed error.?,但看起来我永远都无法捕捉到生产中的断言错误。因此,我的问题是:是否可以确定模板字符串是否可以正确呈现?或者这类功能超出了ember的能力范围?非常感谢的指针:)
发布于 2016-05-07 11:46:45
我想你也许可以通过使用组件助手来动态显示组件来解决你的问题,看看这个post,了解它是如何工作的等等。
以下是我建议您尝试使用组件帮助器解决问题的方法:
// components/toggling-component.js
export default Ember.Component.extend({
mode: 'display',
modeComponent: Ember.computed('mode', function(){
return this.get('mode') + '-mode'
}),
actions: {
setMode(mode){
this.set('mode', mode)
}
}
})
// templates/components/toggling-component.hbs
Current Mode: {{mode}}<br/>
<button {{action 'setMode' 'display'}}>Toggle Display</button>|
<button {{action 'setMode' 'edit'}}>Toggle Edit</button>
<hr/>
{{component modeComponent text=model.textContent}}
现在,通过切换mode属性,您可以加载您想要的任何模式,其中一个模式将对应于以下两个组件:
// templates/components/display-mode.hbs
Display Mode Component: <br/>
{{text}}
// templates/components/edit-mode.hbs
Edit Mode Component: <br/>
{{textarea value=text cols="80" rows="6"}}
这是一个演示完整解决方案的twiddle。
https://stackoverflow.com/questions/37073462
复制相似问题