Ember 访问控制器内的模型

Ember access model inside a controller

如何从控制器中访问模型?当前使用下面的代码 returns a "undefined is not a function"(去图 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') 适用于操作。它 returns 模型,可以使用 plan.get('price') 访问属性。不理想,但它完成了工作。为什么它不起作用是因为它在一个函数内,该函数被调用为动作内部的回调。所以可能 "this" 的范围也没有执行到回调函数。我将回调函数作为内部函数移动到操作中,然后 "this" 范围起作用了。

关于作用域问题,这里有解决方法setting an application controller variable to results returned from AJAX call