恩伯,与模特一起工作

时间:2013-04-08 19:00:28

标签: ember.js ember-router

我对如何在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())才能获取和设置值?

1 个答案:

答案 0 :(得分:3)

在将Model设置为Controller方面,您可能不了解conventions

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'));