2016-06-28 4 views
0

通常エンバーで、あなたのセットアップモデル:あなたがの値を取得することができ、そこからエンバー多次元配列、ベストプラクティス

{{input value=name}} 
{{input value=address}} 
{{input value=sports}} 

export default Model.extend({ 
    "name": attr('string'), 
    "address": attr('string'), 
    "sports": attr() 
}) 

あなたは、フォームを作成します

var name_val = this.get('name'); 
var address_val = this.get('address'); 
var sports_val = this.get('sports'); 

又は値設定:

の値を入力または設定します
this.set('address','123 Main Street'); 

どのように動的多次元配列を作成して保存するのですか?たとえば、あなたは、いくつかのスポーツをリストする:

{{input type="checkbox" name="baseball" checked=baseball.isChecked}} 
{{input type="checkbox" name="football" checked=football.isChecked}} 
{{input type="checkbox" name="hockey" checked=hockey.isChecked}} 

そこから、おそらくあなたがチェックスポーツ与えられ、ユーザがそのスポーツを見たり、そのスポーツをプレイするん知りたいですか?これは、ドロップダウンまたはそれ以上のチェックボックスを使用して行うことができます。最終的に、最終結果は、このJSONのようになります。

{ 
    'name': 'Matt', 
    'address': '123 Main Street', 
    'sports': { 
     'baseball': 'watch', 
     'hockey': 'play' 
    } 

} 

エンバーは1つのレベルの深さの設定項目に簡単であるようだが、どのようなマルチ、動的な値とレベルについて?

答えて

1

このようなシナリオでは、代わりにhasMany関係を使用することをお勧めします。我々はペイロードが埋め込まれたいので

//user.js 
import DS from 'ember-data'; 
export default Model.extend({ 
    "name": DS.attr('string'), 
    "address": DS.attr('string'), 
    "sports": DS.hasMany('sport') 
}) 

//sport.js 
import DS from 'ember-data'; 
export default Model.extend({ 
    "name": DS.attr('string'), 
    "play": DS.attr('boolean'), 
    "watch": DS.attr('boolean') 
}); 

、我々が埋め込まレコードミックスインを使用することができます:あなたはそう簡単に行うことができ、スポーツに関連したより多くの属性を追加したい場合には、例えば、あまりにも物事をより柔軟になるだろう:

//serializers/user.js 
import DS from 'ember-data'; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    sports: { embedded: 'always' } 
    } 
}); 

このように構成されたデフォルトのペイロードは次のようになります。

{users:[ 
{ 
    'id':1, 
    'name': 'Matt', 
    'address': '123 Main Street', 
    'sports': [ 
     {'id':1, 'name':'baseball', 'watch':true, 'play':false}, 
     {'id':2, 'name':'hockey', 'watch':true, 'play':true} 
    ] 

} 
]} 

しかし、あなたは絶対に、あなたはWAかもしれない、あなたが持っているもののように見えるようにペイロードが必要な場合シリアライザ(http://emberjs.com/api/data/classes/DS.RESTSerializer.html)を掘り起こすために特別に "ノーマライズ"し、データをクライアントに送るためにデータを理解してから、 "シリアル化"して保存する形式でサーバーに送信するようにデータを変更します。