次の問題があります。
私のアプリでは、新しい を作成する画面がありますSite
。しかしaction
、コントローラーの を介して新しいサイトを保存すると、languages
-property はPOST
-request と共にサーバーに送信されません。
新しいサイトを追加するためのテンプレートは次のとおりです。
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
{{view Ember.TextField valueBinding="name"}}
</div>
</div>
<div class="control-group">
<label class="control-label" for="languages">Languages</label>
<div class="controls">
{{view Ember.Select contentBinding="controllers.languages" selectionBinding="languages" optionValuePath="content.id" optionLabelPath="content.description" multiple="true"}}
</div>
</div>
<div class="form-actions">
<button {{ action "createSite" }} class="btn btn-primary">Save</button>
</div>
私は自分を次のStore
ように定義しました:
App.Store = DS.Store.extend({
revision : 12,
adapter : DS.RESTAdapter.extend({
namespace : 'rest'
})
});
これは私のコントローラーです:
App.SitesNewController = Em.ObjectController.extend({
needs: ['languages'],
name: null,
languages: null,
createSite : function() {
var self = this;
var name = this.get('name');
var languages = this.get('languages');
// Create the new Site model
var s = App.Site.createRecord({
name : name
});
$.each(languages,function(i,lang) {
s.get('languages').addObject(lang);
});
this.get('store').commit();
}
});
これがSite
モデルです
App.Site = DS.Model.extend({
name : DS.attr('string'),
languages : DS.hasMany('App.Language')
});
Language
-モデル:
App.Language = DS.Model.extend({
description : DS.attr('string')
});
サーバーに送信されたPOST
-request データは次のとおりです。
{
"site":{"name":"test"}
}
だから私は - プロパティが恋しいlanguage
です。実際には、language_ids
ID の配列を持つプロパティが必要です。
RESTAdapter
-configuration を次のように編集すると:
DS.RESTAdapter.map('App.Site', {
languages: { embedded: 'always' }
});
-requestPOST
データは次のとおりです。
{
"site": {
"name":"test",
"languages":[{
"id":2,"description":"English"
},{
"id":3,"description":"Deutsch"
}]
}
}
言語は、リクエスト データに埋め込まれています。これは問題ありません。バックエンドでid
保存する前に取得します。language
ただし、データが GET 応答にも埋め込まれていることを期待していることを知っておいてください。
id
POST データで 'sだけを送信する方法は何ですか? 私はそれを次のようにしたい:
{
"site": {
"name":"test",
"languages":[2,3]
}
}