无法从 ember 中的路线操作获取模型

cant get model from route action in ember

我只想在从控制器获取动作的同时刷新路线中的模型,然后 运行 在此路线中执行刷新动作

这是我的代码

    import Ember from 'ember';

export default Ember.Route.extend({
  profileFormService: Ember.inject.service(),
  profileFormAtributeService: Ember.inject.service(),
  model(){
    return Ember.RSVP.hash({
      profileForms: this.get('profileFormService').find(),
      profileFormsAttributes: this.get('profileFormAtributeService').findByProfileFormId("1"),
      inputTypes: {data: ['CHECKBOX', 'NUMBER_FIELD', 'PHONE_NUMBER', 'TEXT_FIELD', 'EMAIL', 'TEXT_AREA', 'RADIO_BUTTON', 'DESA', 'KABUPATEN_KOTA', 'PROVINSI', 'KECAMATAN', 'MAP_POINT', 'MAP_POLYGON']}
    });
  },
  setupController(controller, model) {
    this.controllerFor('backend.setting-profile-form-attribute').set('profileForms', model.profileForms);
    this.controllerFor('backend.setting-profile-form-attribute').set('profileFormsAttributes', model.profileFormsAttributes);
    this.controllerFor('backend.setting-profile-form-attribute').set('inputTypes', model.inputTypes);
  },
  actions:{
    doRefresh(param){
      let context = this;
      this.get('profileFormAtributeService').findByProfileFormId(param).then(function (response) {
        context.set("profileFormsAttributes",response);
      }), function (e) {
        this.debug(e);
      };
    }
  }
});

不幸的是,这不会影响 profileFormsAttributes 模型。

我一直在尝试用这个调试模型

this.debug(this.get('controller.model.profileFormsAttributes'))
this.debug(this.get('model.profileFormsAttributes'));

但控制台日志显示未定义

你能解决这个问题并解释一下我的路线中发生了什么吗..

感谢您的关心

您的问题是您无法像 this.get('profileFormsAttributes') 那样直接从操作处理程序中的路由中实现对象 return;因此您的设置不起作用。

this.get('controller.model.profileFormsAttributes');
this.get('model.profileFormsAttributes');

即使以上两种说法也行不通;因为您无法像这样检索 modelcontroller

你有两个选择;您需要直接在 model 钩子 this.set('model', model) 中从模型中保存您要 return 的内容,或者您​​可以使用 this.controllerFor(this.get('routeName')).get('model')

来实现它

我会为你的情况推荐第二种方法。请看下面的twiddle我准备的案例给大家看一下

请查看 index.js,其中从 model 挂钩中设置对象 return 的 foo 属性设置为

Ember.set(this.controllerFor(this.get('routeName')).get('model'), 'foo', 'foo updated');

希望对您有所帮助。