2015-05-25 4 views
0

У меня есть приложение, работающее с Ember 1.12.0. Я простой шаблон называется /app/templates/repositories.hbs с этим содержанием:Не удается поделиться зависимостями от контроллера

{{controllers.user.login}} 

Я добавил это в контроллере app/controllers/repositories.js:

import Ember from 'ember'; 

export default Ember.ArrayController.extend({ 
    needs: "user", 
}); 

У меня есть этот маршрут:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function(params) { 
    var user = this.modelFor('user'); 
    console.log(user); 
    return Ember.$.getJSON('https://api.github.com/users/'+user.login+'/repos'); 
    } 
}); 

И этот маршрутизатор:

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

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

Router.map(function() { 
    this.route('index', {path: '/'}); 
    this.resource('user', {path: '/users/:login'}, function() { 
    this.resource('repositories'); 
    }); 
}); 

export default Router; 

Согласно the documentation. Я должен показать логин пользователя, но у меня ничего нет. Он показывает объект пользователя в консоли, но не в представлении.

Является ли решение?

ответ

1

Если я правильно понял, у вас есть модель user, полученная по маршруту user (как вы можете видеть на консоли, modelFor работает правильно). Тем не менее, вы пытаетесь получить объект login на контроллере user - я думаю, что он не определен. То, что вы действительно хотите получить, это login свойство объекта, являющегося моделью для user route (возможно, это пользователь, но вы не отправили свой код маршрута user).

Чтобы использовать эти две модели в одном контроллере, вам не нужно делиться этими контроллерами. Все, что вам нужно, это модель для маршрута user. Таким образом, вы можете оставить свой model крюк следующим образом:

model: function(params) { 
    return Ember.$.getJSON('https://api.github.com/users/'+user.login+'/repos'); 
} 

И написать свой метод setupController следующим образом:

setupController: function(controller, model) { 
    controller.set("model", model); 
    controller.set("user", this.modelFor("user"); 
} 

И в шаблоне вы бы иметь свой repos от AJAX и user свойства с этим имущество.

{{user.login}} 

С другой стороны, вы могли бы, с некоторыми исправлениями, использовать общий user контроллер получения такого же эффект, но это не то, что вам нужно - нужно только модель для этого контроллера, а не весь объект.

+0

Это работает, но это странно, потому что документ не содержит этого. – Dougui

+0

Что вы имеете в виду, что документы не содержат этого? Если вы хотите использовать общие зависимости, вам нужно будет использовать в шаблоне что-то вроде 'controllers.user.user.login', поскольку объект' user' определен ** на ** 'user' controller. Однако, как я уже сказал, вам нужна модель, а не контроллер. Поэтому предлагаемое мной решение является более чистым. –

Смежные вопросы