這是一種情況,我認爲你不想使用Ember而是直接使用jQuery。使用Ember處理靜態類和通過Handlebars助手提供的類,但使用jQuery添加計算出的屬性類。例如,讓我們說你有一個名爲extraClasses
的計算屬性。嘗試是這樣的:
extraClasses: function() {
return ['one', 'two', 'three'];
}.property(),
previousExtraClasses: [],
manageClasses: function() {
var previousExtraClasses = this.get('previousExtraClasses');
var extraClasses = this.get('extraClasses');
// Remove the classes that got removed from `extraClasses`
previousExtraClasses.forEach(function(className) {
if (extraClasses.indexOf(className) < 0) {
this.$().removeClass(className);
}
}, this);
// Add the classes that got added to `extraClasses`
extraClasses.forEach(function(className) {
if (previousExtraClasses.indexOf(className) < 0) {
this.$().addClass(className);
}
}, this);
this.set('previousExtraClasses', extraClasses);
).observesImmediately('extraClasses')
每次使用一組新的類更新extraClasses
,在manageClasses
觀察者將採取組件管理類的照顧。只要extraClasses
返回一個字符串數組,它可以任何你喜歡的方式進行計算。
來源
2014-10-19 12:52:39
GJK
是的,我現在使用類似的模式,但我希望有一個無jQuery的方式。如果沒有人提出建議,很快會接受你的回答。 – vanthome 2014-10-19 14:08:08
不幸的是,你有一個非常獨特的用例,所以Ember不太可能有一個很好的方法來完成這個內置操作(雖然我以前錯了)。如果沒有,我認爲在Ember中編寫jQuery是完全正常的,只要你正確地封裝它。也許把它放在基類組件或其他東西上。只要你的組件API的用戶不必處理jQuery,你就是這樣做的。 – GJK 2014-10-19 16:32:35