コントローラ内からモデルにアクセスするにはどうすればよいですか?現在、以下のコードを使用すると、「未定義は関数ではありません」が返されます(図JSが失敗する...)。
models/plan.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
period: DS.attr('number'),
price: DS.attr('number'),
});
routes/checkout.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params) {
return this.store.find('plan', params.plan_id);
}
});
controllers/checkout.js
import Ember from 'ember';
export default Ember.Controller.extend({
submitPayment: function(error, result)
{
var plan = this.get('model');
}
}
router.js
Router.map(function() {
this.route('checkout', {path: '/checkout/:plan_id'});
});
私は最終的にそれを理解しました。 plan = this.get('model')
はアクションに対して機能します。モデルを返し、plan.get('price')
でプロパティにアクセスできます。理想的ではありませんが、それは仕事を成し遂げます。それが機能しなかった理由は、アクション内からコールバックとして呼び出された関数内にあったためです。したがって、おそらく「this」のスコープはコールバック関数に対しても実行されませんでした。コールバック関数をアクション内の内部関数として移動すると、「this」スコープが機能しました。
スコープの問題については、次の解決策があります アプリケーションコントローラー変数をAJAX call から返された結果に設定する