断言失败:您需要将模型名称传递给商店的modelFor方法

时间:2016-05-24 04:05:19

标签: ember.js

Ember很新,所以也许有人可以帮助我。我一直在遇到这个错误并且不知道如何解决它。

Ember             : 2.5.1
Ember Data        : 2.5.3

以下是我的router.js

//app/router.js
import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('organization', {path: '/organization/:id'}, function(){
    this.route('about', { path: '/about' });
    this.route('admin', { path: '/admin' }, function(){
        this.route('team', { path: '/team/:team_id' });
    });
  });
});

organization/:id/aboutorganization/:id/admin路由正常。但是当我尝试加载organization/:id/admin/team/:team_id路由时,会抛出错误。以下是routes/organization/admin/team.js文件:

//app/routes/organization/admin/team.js
import Ember from 'ember';

export default Ember.Route.extend({

    model(params) {
        let organization = this.modelFor('organization');
        return organization.get('team');
    }

});

不确定我应该发布哪些其他信息,因此请询问您认为有必要帮助调试的任何其他信息。我的猜测是它非常简单,而且我完全没有注意到它。

修改

我已经添加了几个文件来帮助诊断问题:

//app/routes/organization.js
import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord('organization', params.organization_id)
  }
});

//app/routes/organization/admin.js
import Ember from 'ember';

export default Ember.Route.extend({
  actions: {
    changeValue(){
      this.currentModel.save();
    }
  }
});

currentModelorganization路线的模型。我暂时删除了organization.admin.team模型钩子,只是测试一个

{{#link-to 'organization.admin.team' model.team.id}} Team {{/link-to}}

在我传递organization.admin的{​​{1}}模板中呈现的组件中。但是现在我在渲染model=model模板时在Javascript控制台中得到了同样的错误(断言失败:你需要将模型名称传递给商店的modelFor方法)。

2 个答案:

答案 0 :(得分:1)

如果您将Object传递给{{#link-to}}助手。它会跳过模型钩子。所以你基本上可以发送{{#link-to 'team' organization.team}}而不必写"模型"钩。

"它是有意义的,它可能会保存对服务器的请求,但诚然,它不直观。一个巧妙的方法是传入,而不是对象本身,但它的身份和#34; - https://www.toptal.com/emberjs/the-8-most-common-ember-js-developer-mistakes"。

所以你应该做

HBS

{{#link-to 'team' organization.team.id}} Link to team management {{/link-to}}

路线

model(params) {
   return this.store.findRecord('team', params.team_id) 
}

答案 1 :(得分:0)

您可以使用modelFor(' parent')方法来获取组织模型。  像那样

//应用程序/路由/组织/管理/ team.js 从' ember';

导入Ember
export default Ember.Route.extend({

    model(params) {
        let organization = this.modelFor('parent');
        return this.store.findRecord('team', params.team_id)
    }

});

我想你想做那样的事情。 基本上ember不支持嵌套路由。