2015-09-15 9 views
0

Я это router.js:модель доступа с другого маршрута в EmberJS

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; 

и эти 2 модели

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 инспектора), но я могу» t, похоже, обращаются к нему на моем маршруте data-functions/index.js. Как мне это сделать? Мне нужна модель анализа для расширения findAll в моем адаптере для работы с данными, чтобы изменить URL-адрес ресурса rails-api.

Я пробовал использовать this.store.modelFor("analysis").get("id"), но это ошибки, говорящие о том, что get не является funcion.

Я использую Ember 2.0.1 и Ember Data 2.0.0. Я потерян здесь, любая помощь будет очень признательна.

+0

'this.store.findRecord ("анализ", идентификатор)' - см http://guides.emberjs.com /v2.0.0/models/the-rest-adapter/ – elithrar

+0

Можете ли вы поделиться кодом маршрута, где вы определяете функцию 'model' с загруженной моделью анализа? В каком месте вы пытались использовать 'this.store.modelFor ...'? –

+0

Чтобы получить доступ к модели другого маршрута, вы должны явно вернуть его, ввести его или он должен быть вложенным маршрутом листа. – elrick

ответ

1

Он не возвращает режим, потому что вы возвращаете оператор журнала в маршруте dataFunctions. Попробуй.

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

Это не решает мою проблему. Поскольку params.analysis_id nil в этом маршруте, он получает весь анализ, а не только тот, у которого id = 1 –

+0

Вы передаете экземпляр модели при переходе на маршрут? Вам не следует переходить на маршрут, если вы не передаете идентификатор в параметрах. –

+0

Я проверяю это только на доступ к URL-адресу «/ analysis/1/dataFunctions», например, если кто-то его помещает в закладки. Таким образом, переходы не используются. Тем не менее, есть ссылка, указывающая на этот маршрут, и она проходит модель анализа. –

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 в функцию данных, чтобы отразить соответствующие соглашения, например. используя сингулярное и дегазирование.

Модель анализа

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}) 
}); 
Смежные вопросы