我有一个表单可以单独填写或嵌入到另一个表单中,作为更大对象的一部分。当我{{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> Save
</button>
{{/unless}}
我可以在Ember Inspector Chrome插件中看到该属性,它显示为布尔true
。我可以在isEmbedded
函数上设置一个断点,看看在子模板渲染时它没有被调用,但是当我打开Ember Inspector或者我使用Inspector手动更改值时它会被调用。最后,如果我将EditIntroView
中的默认值设置为embedded: true
,则按钮会像我预期的那样隐藏。
那么我怎样才能让子视图尊重从另一个模板的{{render}}
调用中设置的简单参数?
答案 0 :(得分:0)
模板显然没有只在视图中定义的属性作为其上下文的一部分。由于isEmbedded
属性仅在视图上而不是模型或控制器上,因此需要以view.
为前缀。因此,工作代码修复就像:
{{#unless view.isEmbedded}}
就是这样。
在this Ember question about class views vs instance views找到答案。