2013-03-27 15 views
8

Ember.jsのフォームを使用しています。すべてのモデルプロパティのリストを取得して、異なる時点でフォームの状態のスナップショットを取得できます。 。モデルのすべてのプロパティのリストを取得する方法はありますか?例えばEmber.jsモデルのすべてのプロパティを取得する方法

私のモデルがある場合、:そこには簡単な方法はありませんが、あなたのようなカスタムミックスインを試みることができる

> getEmberProps('User') 

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

JSON.stringify?あなたはそれを試しましたか? – marko

+0

hmmm、私はEmberモデルにJSON.stringifyする方法を知らないだろう – joscas

答えて

13

モデルでtoJSONメソッドを使用して、オブジェクトからキーを取得することができます。

Ember.keys(model.toJSON())

関係のためにあなたのキーを返しません注意してください。フィールドとその値をプリントアウトする

+4

'あなたがリレーションの鍵を返さないことに注意してください.' - >あなたが使用しているemberのバージョンがわかりません。 Ember 1.11.3を使用しています。バージョンリレーションのキーも返されます。 –

0

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'), 
} 

それから私はこのような何かを持っていると思いますこの:

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

+0

mixinが気に入らない場合は、モデルを引数として別の関数にコードを抽出するのは簡単です。しかし、私は理解していない、なぜあなたはmixinが好きではない。これは、おそらくこの問題を解決する最も賢明な方法です。 – mavilein

+0

まあ、私は混乱しているかもしれませんが、私がこのようにmixinを使用すると、オブジェクトインスタンスのプロパティが得られますが、それはできません: 'User = DS.Model.extend(Ember.AllKeysMixin、 DS_attr( 'string')、 current_password:DS.attr( 'string')、 パスワード:DS.attr( 'string')、 名前:DS.attr( 'string')、 電子メール:DS.attrパスワード '確認':DS.attr( 'string')、 admin:DS.attr( 'boolean')、 'model.getKeys()'他の場所で 'name'、 'email'などを取得する。 – joscas

4

簡単な方法:関係についても同様の性質があまりにもあります
http://emberjs.com/api/data/classes/DS.Model.html#property_attributes http://emberjs.com/api/data/classes/DS.Model.html#method_eachAttribute

Ember.get(App.User, 'attributes').map(function(name) { return name; }); 
Ember.get(userInstance.constructor, 'attributes').map(function(name) { return name; }); 

Ember.keys(model.toJSON()).forEach(function(prop) { console.log(prop + " " + model.get(prop)); }) 
4

また、これを使用することができます。

関連する問題