1

这应该不会太难。

我有一个 datepicker UI 小部件,每次用户单击一个月时,我都想从MonthsController(an ArrayController) 中添加或删除该月。与MonthsController路线无关,所以在我的ApplicationTemplate我只是有

{{render months}}

我的日期选择器视图的简化版本是

App.DatepickerView = Ember.View.extend({
    click: function(e) {
      var id = $(this).datepicker().data('date').replace(" ", "-");
      this.get('controller.controllers.months').toggleMonth(id);
    }
});

我处理我的事件MonthsController

App.MonthsController = Ember.ArrayController.extend({
    toggleMonth: function(id) {
        var month = App.Month.find(id),
            index = this.indexOf(month);
        if (index === -1) {
            this.pushObject(month);
        } else {
            this.removeAt(index);
        }
    }
});

我以为我有这个工作,但后来我意识到month在最后一个片段中并不是真正的App.Month,它只是(我想)一个匿名对象。

如何以编程方式向控制器添加/删除模型?

4

1 回答 1

2

App.Month.find(id)将返回一个promise. 如果该月尚未加载,您还将从服务器加载此数据。您需要将代码包装在 promise 的then.

toggleMonth: function(id) {
  var _this = this;

  App.Month.find(id).then(function(month) {
    var index = _this.indexOf(month);
    if (index === -1) {
        _this.pushObject(month);
    } else {
        _this.removeAt(index);
    }
  });
}
于 2013-07-27T05:20:33.067 回答