从EmberJS中的另一条路线访问模型

时间:2015-09-15 12:26:38

标签: ember.js ember-data

我有router.js

import Ember from 'ember';
import config from './config/environment';

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

Router.map(function() {
  this.route('analyses', function() {
  this.route('new', { path: 'new'});
  this.route('show', { path: ':analysis_id' });
  this.route('edit', { path: ':analysis_id/edit'});
  this.route('dataFunctions', { path: ':analysis_id/dataFunctions', resetNamespace: true }, function() {
      this.route('new', { path: 'new'});
  });
});

export default Router;

和这两个模型

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  dataFunctions: DS.hasMany('dataFunction', {async: true}),
});

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  analysis: DS.belongsTo('analysis', {async: true})
});

routes/data-functions/index.js的内容:

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    console.log(this.store.findRecord("analysis", id).get("dataFunctions"));
  }
});

routes/analyses/index.js的内容:

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
      return this.store.findAll("analysis");
    },

    setupController(controller, model) {
      controller.set("analyses", model);
    }

});

routes/analyses/show.js的内容:

import Ember from 'ember';

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

  setupController(controller, model) {
    controller.set("analysis", model);
  }
});

当我导航到/analyses/1/dataFunctions时,我的分析模型已加载(它在ember检查器中显示),但我似乎无法在data-functions/index.js路径中访问它。我该怎么做?我需要分析模型在我的数据函数适配器中扩展findAll以更改rails-api嵌套资源的url。

我尝试使用this.store.modelFor("analysis").get("id")但是错误说get不是一个函数。

我正在使用Ember 2.0.1和Ember Data 2.0.0。我迷失在这里,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

它返回没有找到模式,因为你在dataFunctions路由中返回一个日志语句。试一试。

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord("analysis", params.analysis_id)
      .then( (analysis) => {
        return analysis.get('dataFuncitons');
      })
    }
});

答案 1 :(得分:1)

好的,所以通过代码有一些问题。分析中存在拼写错误,而resetNamespace使得事情变得怪异。还删除了一些冗余路径名。

Router.map(function() {
  this.route('analysis', function() {
    this.route('new');
    this.route('show', { path: ':analysis_id' });
    this.route('edit', { path: ':analysis_id/edit'});
    this.route('dataFunctions', { path: ':analysis_id/dataFunctions'}, function() {
        this.route('new');
    });
  });
});

将dataFunctions模型重命名为data-function以反映适当的约定,例如使用单数和dasherizing。

分析模型

export default DS.Model.extend({
  name: DS.attr('string'),
  dataFunctions: DS.hasMany('data-function', {async: true}),
});

数据功能模型

export default DS.Model.extend({
  name: DS.attr('string'),
  analysis: DS.belongsTo('analysis', {async: true})
});