2014-02-05 6 views
5

Ich möchte auf den Controller meiner Route innerhalb des preedSend-Hooks auf einer Route zugreifen, um die Pause bei der Versprechungslogik zu nutzen.Zugriff auf den Controller über das beforeModel einer Route

Dies ist meine aktuelle Problemumgehung, um "category_config" auf meinem Controller setzen zu können, der aus einem Versprechen in beforeModel stammt.

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(); 
    } 
}); 

Falls Sie neugierig sind meine _promise Helfer unter:

_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); 
    }); 
} 

Wie kann ich dies tun, ohne die beforeModel die ‚category_config‘ gesetzt, die auf der Strecke, und es dann am Regler in setupController?

Antwort

6

Nicht getestet, aber ich denke, Sie ein Tupel mit dem Imaging.Document.find() zurückkehren konnte und die _promise("/url/foo/", "GET");, mit Ember.RSVP.hash

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") 
    }); 
    } 
}); 
+0

funktioniert perfekt! (getestet) –

+0

das war ein viel sauberer Ansatz. Vielen Dank! –

+0

Gern geschehen! Wenn das Ihr Problem gelöst hat, können Sie es bitte akzeptieren? –