2013-03-27 140 views
8

我正在使用Ember.js中的表單,我想檢索所有模型屬性的列表,以便我可以在不同時刻拍攝表單狀態的快照。有沒有辦法獲得模型的所有屬性列表?如何檢索Ember.js模型的所有屬性

例如,如果我的模型是:

App.User = DS.Model.extend({ 
    name: DS.attr('string'), 
    email: DS.attr('string'), 
    current_password: DS.attr('string'), 
    password: DS.attr('string'), 
    password_confirmation: DS.attr('string'), 
    admin: DS.attr('boolean'), 
} 

然後,我想有這樣的事情:

> getEmberProps('User') 

["name", "email", "current_password", "password", "password_confirmation", "admin"] 
+0

JSON.stringify?你嘗試過嗎? – marko 2013-03-27 12:22:58

+0

嗯,我不會知道如何JSON.stringify到Ember模型 – joscas 2013-03-27 12:46:34

回答

13

您可以簡單地在模型上使用toJSON方法並從對象中獲取密鑰。

Ember.keys(model.toJSON())

注意,將不會返回你的關係鍵。

+4

'請注意,不會返回您關鍵字的密鑰' - >我不知道您使用的是哪個燼心版本;此刻我正在使用Ember 1.11.3,因爲該版本的關係鍵也會返回。 – 2015-04-17 11:43:38

0

有沒有簡單的方法,但你可以嘗試使用自定義的混入這樣的:

Ember.AllKeysMixin = Ember.Mixin.create({ 
    getKeys: function() { 
     var v, ret = []; 
     for (var key in this) { 
      if (this.hasOwnProperty(key)) { 
       v = this[key]; 
       if (v === 'toString') { 
        continue; 
       } // ignore useless items 
       if (Ember.typeOf(v) === 'function') { 
        continue; 
       } 
       ret.push(key); 
      } 
     } 
     return ret 
    } 
}); 

您可以使用它像這樣:

App.YourObject = Ember.Object.extend(Ember.AllKeysMixin, { 
... //your stuff 
}); 
var yourObject = App.YourObject.create({ 
    foo : "fooValue"; 
}); 
var keys = yourObject.getKeys(); // should be ["foo"]; 
+0

感謝@mavilein我不喜歡這種解決方案是不得不使用混合。我已經提出了一些似乎可行的事情(請參閱我的編輯)。您的解決方案可以在不需要從mixin擴展的情況下工作嗎? – joscas 2013-03-27 12:57:17

+0

如果你不喜歡mixin,應該很容易將代碼提取到一個單獨的函數中,以模型作爲參數。但我不明白,爲什麼你不喜歡mixin。這可能是解決這個問題的最簡單的方法。 – mavilein 2013-03-27 13:04:38

+0

好吧,也許我很困惑,但如果我以這種方式使用mixin,我得到的是對象實例的屬性,但我不能這樣做:'User = DS.Model.extend(Ember.AllKeysMixin, {'name':DS.attr('string'), email: password_confirmation:DS.attr('string'), admin:DS.attr('boolean'),'然後'model.getKeys()'在別的地方得到'name','email'等。 – joscas 2013-03-27 13:15:01

4

一個簡單的方法來打印出的字段和值:您也可以使用此

Ember.keys(model.toJSON()).forEach(function(prop) { console.log(prop + " " + model.get(prop)); }) 
相關問題