从渲染助手设置时,把手模板不尊重视图成员

时间:2014-03-27 19:14:46

标签: javascript templates ember.js handlebars.js observable

我有一个表单可以单独填写或嵌入到另一个表单中,作为更大对象的一部分。当我{{render}}来自包含手柄模板的表单时,子模板不尊重视图上的observable。

父模板:

{{render "EditIntro" introModule embedded=true}}

其中introModule是容器模型上的属性,它返回介绍的特定子模型,该子模型是父项的一部分。

子视图:

App.EditIntroView = Ember.View.extend({
  embedded: false,
  isEmbedded: function() {
    return !!this.get('embedded');
  }.property('embedded'),

  templateName: 'intros/edit_intro',
  // etc.

儿童模板(相关部分):

{{! If this form is embedded, user must use the save button for the parent }}
  {{#unless isEmbedded}}
  <button type="submit" class="btn btn-success">
    <span class="glyphicon glyphicon-save"></span>&nbsp;Save
  </button>
  {{/unless}}

我可以在Ember Inspector Chrome插件中看到该属性,它显示为布尔true。我可以在isEmbedded函数上设置一个断点,看看在子模板渲染时它没有被调用,但是当我打开Ember Inspector或者我使用Inspector手动更改值时它会被调用。最后,如果我将EditIntroView中的默认值设置为embedded: true,则按钮会像我预期的那样隐藏。

那么我怎样才能让子视图尊重从另一个模板的{{render}}调用中设置的简单参数?

1 个答案:

答案 0 :(得分:0)

模板显然没有只在视图中定义的属性作为其上下文的一部分。由于isEmbedded属性仅在视图上而不是模型或控制器上,因此需要以view.为前缀。因此,工作代码修复就像:

一样简单
{{#unless view.isEmbedded}}

就是这样。

this Ember question about class views vs instance views找到答案。