有没有办法在EmberJS上迭代视图的上下文属性?我正在使用Ember-Data(https://github.com/emberjs/data)进行ORM。在EmberJS把手模板中迭代模型的属性
假设我使用connectOutlets向具有电子邮件,名称等属性的用户注册UserView。在连接的Handlebars模板中,是否有我可以迭代这些属性的方法?
基本上,我需要建立一个可以与不同的模型重复使用一个通用的观点...
有没有办法在EmberJS上迭代视图的上下文属性?我正在使用Ember-Data(https://github.com/emberjs/data)进行ORM。在EmberJS把手模板中迭代模型的属性
假设我使用connectOutlets向具有电子邮件,名称等属性的用户注册UserView。在连接的Handlebars模板中,是否有我可以迭代这些属性的方法?
基本上,我需要建立一个可以与不同的模型重复使用一个通用的观点...
瑞恩对这些属性是正确的,但它需要做一些事情才能真正获得你要去的地方。我的例子是使用最新的RC1 Ember。
下面是编辑模板,它是模型无关:
<script type="text/x-handlebars" data-template-name="edit_monster">
{{#if clientId}}
<h1>Edit Monster: {{name}}</h1>
<div>
{{#each metadata}}
<span class="edit-label">{{name}}</span>
<span class="edit-field">
{{view App.AutoTextField typeBinding="type" nameBinding="name" }}
</span>
{{/each}}
</div>
{{else}}
No monster selected.
{{/if}}
</script>
为了使这项工作,我们需要一对夫妇的神奇魔法件。该控制器是一个良好的开端:
App.EditMonsterController = Em.ObjectController.extend({
metadata: function() {
var vals = [];
var attributeMap = this.get('content.constructor.attributes');
attributeMap.forEach(function(name, value) {
vals.push(value);
});
return vals;
}.property('content')
});
,它使用“属性”,瑞安提到的提供,我们在模板送入我们的#each那里的元数据属性!
现在,我们可以使用这个视图来提供文本输入。有一个外部容器视图需要将valueBinding提供给实际的文本框。
App.AutoTextField = Ember.ContainerView.extend({
type: null,
name: null,
init: function() {
this._super();
this.createChildView();
},
createChildView: function() {
this.set('currentView', Ember.TextField.create({
valueBinding: 'controller.' + this.get('name'),
type: this.get('type')
}));
}.observes('name', 'type')
});
下面是一个小提琴展示整个疯狂的事:http://jsfiddle.net/Malkyne/m4bu6/
代表你的模型余烬数据对象有一个包含所有给定模型的属性的attributes
财产。这是Ember Data的toJSON
用来将你的模型转换成Javascript对象的东西。
您可以使用此属性属性来读取模型属性,然后将这些特定属性从实例中拉出。这是一个例子。
只是为了重申一下是怎么回事。我们正在从App.User中读取属性,然后将值从App.ryan和App.steve中提取出来。希望这是有道理的。
否则像这样的价值观仍然约束?如果这些属性在其他地方发生变化,那么这些变化会立即反映在这个视图中......或者如果我在这个视图中使用表单输入,那么表单元素将被绑定到属性的值,反之亦然? –
感谢这@Tess –
该小提琴的Ember数据链接现在是404 ...继承人更新之一:http://jsfiddle.net/ianpetzer/QTdb8/ – ianpetzer
链接再次关闭,我重新创建它现在在Codepen这里:http://codepen.io/kensnyder/pen/doeEu。没有错误,但它不起作用。我很乐意看到这一点,因为我需要在我正在开展的一个项目上做到这一点。 – ken