javascript - HTMLBars 渲染测试

标签 javascript templates ember.js

目前我正在构建一个 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
  )

我解决渲染失败的想法是去掉模板字符串的 { 和 } 字符,然后在警告用户错误后重新编译。

我尝试将编译函数放入 try catch 中,但没有捕获任何内容,大概是因为问题不是编译,而是渲染。

经过一些研究,我发现 Why Ember.onerror() not capturing the Assertion Failed error.?但看起来我永远无法在生产中捕获断言错误。因此我的问题是:是否可以确定模板字符串是否会正确呈现?或者这种功能超出了 ember 的能力范围?非常感谢指点:)

最佳答案

我认为您可以通过使用组件帮助程序动态显示组件来解决您的问题,看看这个 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}}

现在,通过切换该模式属性,您可以加载您想要的任何模式,其中模式将对应于以下两个组件:

// 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这演示了完整的解决方案。

关于javascript - HTMLBars 渲染测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073462/

相关文章:

javascript - 如何在 jQuery 中获取相同命名的最大类元素长度?

azure - 部署 DocumentDb 帐户后无法直接连接到 DocumentDb

c++ - SFINAE 条件和构造函数参数类型

javascript - 未捕获的 TypeError : this. get(...).toArray 不是函数(...)

javascript - Sails.js JSON 到 Ember

javascript - Sequelize 中的一对多关联与 Postgresql

javascript - 在函数内部返回数据,但不在 html 上查看

javascript - KnockoutJS Observable 未在模板中更新

c++ - :c++ template function 中的错误

ember.js - EmberJS 计算属性 getter 无限循环