有沒有辦法在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