2013-04-08 2 views
0

я запутался о том, как настроить извлечения информации из моего (динамической) модели в ember.jsEmber, работая с моделью

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

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()) для получения и установки значений?

ответ

3

Есть conventions, о которых вы, возможно, не знаете, в отношении установки 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'));

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