我定义了以下Ember.View:
App.ControlGroup = Ember.View.extend
classNames: ['control-group']
layoutName: 'controlGroup'
布局模板(controlGroup.handlebars)如下所示:
<label class="control-label">{{ view.label }}</label>
<div class="controls">
{{ yield }}
</div>
以下是使用上面定义的视图的示例:
{{#view App.ControlGroup label="Property code"}}
{{#if isNew}}
{{view Em.TextField valueBinding="code"}}
{{else}}
<p>{{code}}</p>
{{/if}}
{{/view}}
这将生成以下html:
<div id="ember10170" class="ember-view control-group">
<label class="control-label">Property code</label>
<div class="controls">
<input id="ember10172" class="ember-view ember-text-field" type="text">
</div>
</div>
这正是我想要的。但是,我了解到在模板中使用视图的属性(参见上面的{{ view.label }}
,在controlGroup.handlebars中}})是一种反模式,属性查找应该来自视图的控制器。所以我想知道如何去做。在这种情况下,该属性属于视图(html片段)本身,所以我的实现似乎是合法的,但我很想看到其他方法。
答案 0 :(得分:1)
我不认为使用视图属性本身就是一种不好的做法,只是人们倾向于过度使用Ember的这种能力。由于模型,控制器,视图具有不同的生命周期,“什么去哪里”的问题可以分解为:
{{#if}}
帮助者中。我认为这三个组成部分的行为意味着放置任何特定财产的位置 (另外,我认为你的例子非常有条理,如果我错了,我很想听听推理):))
编辑:在label
属性的情况下,几乎就是value
属性在Ember.TextField
等核心类中实现的方式。使用{{view}}
帮助器时可以给它一个值:{{view Ember.TextField value="foo"}}
),也可以通过声明绑定来将它转发给控制器:{{view Ember.TextField valueBinding="foo"}}
。后者将在控制器上使用名为foo
的属性。