控制器内的Ember访问模型

Bog*_*rac 9 ember.js ember-data

如何从控制器中访问模型?目前使用下面的代码返回"undefined is not a function"(如图JS失败...).

车型/ plan.js

import DS from 'ember-data';

export default DS.Model.extend({
    name:       DS.attr('string'),
    period:     DS.attr('number'),
    price:      DS.attr('number'),
});
Run Code Online (Sandbox Code Playgroud)

路线/ checkout.js

import Ember from 'ember';

export default Ember.Route.extend({

    model: function(params) {
        return this.store.find('plan', params.plan_id);
    }
});
Run Code Online (Sandbox Code Playgroud)

控制器/ checkout.js

import Ember from 'ember';

export default Ember.Controller.extend({

    submitPayment: function(error, result)
    {
          var plan = this.get('model');
    }
}
Run Code Online (Sandbox Code Playgroud)

router.js

Router.map(function() {
  this.route('checkout', {path: '/checkout/:plan_id'});
});
Run Code Online (Sandbox Code Playgroud)

Bog*_*rac 11

我终于明白了.plan = this.get('model')适合行动.它返回模型,可以访问属性plan.get('price').不理想,但它完成了工作.它为什么不起作用是因为它位于一个函数内部,该函数被称为动作内部的回调.因此,"this"的范围可能也不会对回调函数执行.我将回调函数作为内部函数移动到操作中,然后"this"范围起作用.

至于范围问题,这里是将应用程序控制器变量设置为从AJAX调用返回的结果的解决方案

  • 弄清楚了.它在控制器中的工作方式如下:message:Ember.computed.alias('model.message'),... (2认同)