Эмбер, работа с моделью

Я не понимаю, как настроить получение информации из моей (динамической) модели в Ember.js.

Вот моя модель (пока работает):

App.Router.map(function() {
        this.resource('calendar', { path: '/calendar/:currentMonth'});
});

App.CalendarRoute = Ember.Route.extend({
  model: function (params) {
    var obj = {
       daysList: calendar.getDaysInMonth("2013", params.currentMonth),
       currentMonth: params.currentMonth
    };
    return obj;
  }
});

Я просто хочу вернуть атрибут currentMonth:

App.CalendarController = Ember.Controller.extend({
  next: function() {
    console.log(this.get('currentMonth'));
  }
});

Но я получаю "неопределенную" ошибку.

Должен ли я явно объявлять свою модель (Ember.model.extend()), чтобы получить и установить значения?


person redconservatory    schedule 08.04.2013    source источник


Ответы (1)


Существуют некоторые условия, о которых вы могли не знать в отношении установка Model в Controller.

В Route моделью может быть любой объект или набор объектов, который вы определяете. Существует множество соглашений, которые применяются, и в большинстве случаев вам не нужно ничего указывать, поскольку он использует имена различных объектов, чтобы направлять себя при построении запроса и наборе содержимого вашего контроллера, однако, в вашем конкретный код, вы возвращаете obj в качестве модели.

Ember предоставляет хук под названием setupController, который установит этот объект в свойство content вашего контроллера. Пример:

App.CalendarRoute = Ember.Route.extend({
  model: function (params) {
    var obj = {
       daysList: calendar.getDaysInMonth("2013", params.currentMonth),
       currentMonth: params.currentMonth
    };
    return obj;
  },
  setupController: function(controller, model) {
     // model in this case, should be the instance of your "obj" from "model" above
     controller.set('content', model);
  }
});

С учетом сказанного вам следует попробовать console.log(this.get('content.currentMonth'));

person MilkyWayJoe    schedule 08.04.2013