web-dev-qa-db-ja.com

Emberコントローラー内のアクセスモデル

コントローラ内からモデルにアクセスするにはどうすればよいですか?現在、以下のコードを使用すると、「未定義は関数ではありません」が返されます(図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'});
});
9
Bogdan Zurac

私は最終的にそれを理解しました。 plan = this.get('model')はアクションに対して機能します。モデルを返し、plan.get('price')でプロパティにアクセスできます。理想的ではありませんが、それは仕事を成し遂げます。それが機能しなかった理由は、アクション内からコールバックとして呼び出された関数内にあったためです。したがって、おそらく「this」のスコープはコールバック関数に対しても実行されませんでした。コールバック関数をアクション内の内部関数として移動すると、「this」スコープが機能しました。

スコープの問題については、次の解決策があります アプリケーションコントローラー変数をAJAX call から返された結果に設定する

11
Bogdan Zurac