RESTAdapter インスタンスでカスタム URL を構築するためにコントローラー プロパティにアクセスする必要がありますが、アダプターのコンテキスト内でコントローラーにアクセスする方法が見つかりません。ここに私が持っているものがあります:
次のような単純なモデルがあります。
App.Customer = DS.Model.extend(
{
first_name: DS.attr('string'),
last_name: DS.attr('string'),
date_of_birth: DS.attr('string'),
created_at: DS.attr('string'),
updated_at: DS.attr('string')
});
このモデルのリソース REST URL は次のようになります: https://api.server.com/v1/accounts/ :account_id /customers/ :customer_id
リソース URL を個別にカスタマイズできるように、ほとんどのモデルで Ember Data の RESTAdapter を拡張しています。このような:
App.CustomerAdapter = DS.RESTAdapter.extend(
{
buildURL: function(type, id)
{
// I need access to an account_id here:
return "new_url";
}
});
ご覧のとおり、この例では、顧客オブジェクトをクエリできるように URL にアカウント ID が必要です。アカウント ID は、ユーザーがログインによって提供する必要があったAccountController
もので、 のインスタンスである に格納されますEmber.Controller
。
AccountController
私の質問は、 my内から my プロパティにアクセスするにはどうすればよいCustomerAdapter
ですか? ここに私が試したことがありますが、どれもうまくいきませんでした:
App.CustomerAdapter = DS.RESTAdapter.extend(
{
buildURL: function(type, id)
{
var account_id = this.controllerFor('account').get('activeAccount').get('id');
return "new_url";
}
});
、
App.CustomerAdapter = DS.RESTAdapter.extend(
{
needs: ['account'],
accountController: Ember.computed.alias("controllers.account"),
buildURL: function(type, id)
{
var account_id = this.get('accountController').get('activeAccount').get('id');
return "new_url";
}
});
、
App.CustomerAdapter = DS.RESTAdapter.extend(
{
activeAccountBinding = Ember.Binding.oneWay('App.AccountController.activeAccount');
buildURL: function(type, id)
{
var account_id = this.get('activeAccount').get('id');
return "new_url";
}
});
現時点で考えられる唯一のハックは、アカウント ID を Ember 外のグローバル変数に入れ、そこから Adapter 内でアクセスすることです。
他の提案?