【问题标题】:Accessing the controller from a route's beforeModel从路由的 beforeModel 访问控制器
【发布时间】:2014-03-02 07:56:55
【问题描述】:

我想从路由的 beforeSend 挂钩中访问我的路由控制器,以利用 Promise 逻辑的暂停。

这是我目前的解决方法,能够在我的控制器上设置“category_config”,这是从 beforeModel 中的承诺获得的。

Imaging.ReferenceRoute = Ember.Route.extend(Imaging.Ajax, {
  setupController: function(controller, model) {
    controller.set('error_messages', []);
    controller.set('category_config', this.get('category_config'));
    return this._super(controller, model);
  },
  beforeModel: function(transition) {
    var categories;
    categories = this._promise("/url/foo/", "GET");
    return Ember.RSVP.all([categories]).then(((function(_this) {
      return function(response) {
        return _this.set('category_config', response[0]);
      };
    })(this)));
  },
  model: function() {
    return Imaging.Document.find();
  }
});

如果你好奇我的 _promise 助手如下:

_promise: function(url, type, hash) {
  return new Ember.RSVP.Promise(function(resolve, reject) {
    hash = hash || {};
    hash.url = url;
    hash.type = type;
    hash.dataType = "json";
    hash.success = function(json) {
      return Ember.run(null, resolve, json);
    };
    hash.error = function(json) {
      if (json && json.then) {
        json.then = null;
      }
      return Ember.run(null, reject, json);
    };
    return $.ajax(hash);
  });
}

如果没有 beforeModel 在路由上设置“category_config”,然后在 setupController 中的控制器上设置它,我该如何做到这一点?

【问题讨论】:

    标签: javascript ember.js rsvp.js


    【解决方案1】:

    未经测试,但我认为您可以使用Ember.RSVP.hash 返回一个包含Imaging.Document.find()_promise("/url/foo/", "GET"); 的元组

    Imaging.ReferenceRoute = Ember.Route.extend(Imaging.Ajax, {
      setupController: function(controller, model) {
        controller.set('error_messages', []);
        controller.set('category_config', model.category_config);
        return this._super(controller, model.document);
      },  
      model: function() {
        return Ember.RSVP.hash({
          document: Imaging.Document.find(),
          category_config: this._promise("/url/foo/", "GET")
        });
      }
    });
    

    【讨论】:

    • 这是一种更简洁的方法。谢谢!
    • 不客气!如果这解决了您的问题,您可以接受吗?
    • @MarcioJunior 这就是我喜欢 stackoverflow 的原因。这个哈希正是我所需要的
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2018-12-23
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多