2014-09-19 13 views
18

In 1.7 Ember dovrebbe supportare i parametri di query. Non ho problemi a utilizzarli nel controller, ma mi piacerebbe accedervi in ​​Route, idealmente in modalità beforeModel, ma anche il hook del modello funzionerebbe.Come accedere ai parametri di ricerca dal percorso in Ember 1.7

Il API docs menziona un parametro quereyParam per il hook beforeModel ma se provo a utilizzarlo, è sempre indefinito.

Il numero Query Parameters guide sembra suggerire che i parametri della query devono essere accessibili come parte del primo parametro al hook del modello. Ma anche questo è indefinito. Vedere il codice seguente per esempi.

C'è un modo per accedere ai parametri di ricerca da Route? Grazie per il vostro aiuto.

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition, queryParams){ 
     console.log(queryParams.test); //undefined at /?test=123 
    }, 
    model: function(params){ 
     console.log(params.test); //undefined at /?test=123 
    } 
}); 
+2

Dovresti essere in grado di estrarlo dall'oggetto 'params' nel hook del modello. vedi: http://emberjs.jsbin.com/necid/1/edit?html,js,console,output Stai impostando 'test' come queryParam nel controller? – tikotzky

+0

Grazie, è andata così. Non mi è mai venuto in mente che il controller possa influenzare la rotta. Ho pensato che l'impostazione fosse solo per accedere a queryParams direttamente nel controller. – jancervinka

risposta

19

abbastanza sicuro che sia un bug, ma è possibile accedere nel frattempo tramite l'oggetto di transizione:

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition){ 
     console.log(transition.queryParams.test); 
    } 
} 
+2

Grazie, questo funziona ed è più pulito farlo prima del hook di modello. È strano che anche in 1.8.1 non è stato ancora risolto. Non sono sicuro che si tratti di un bug o di una documentazione poco chiara. – jancervinka

+0

@typeoneerror: la soluzione funziona solo se locationType è auto. Sai come afferrare i parametri di query se il tipo di posizione è l'hash –

6

Specificando i parametri di query nel controller, params conterrà automaticamente

ApplicationController = Ember.Controller.extend({ 
    queryParams: ['test'], 
    test: null 
}); 
+0

Come possono accedervi? 'console.log (this.get ('test'))' mi sta lanciando un indefinito. Grazie! –

+0

Esattamente ... lo stesso problema? – testndtv

+1

Nel percorso è possibile ottenere il valore di 'test' utilizzando' this.controller.get ('test') ' – Voles

-4

Se si desidera accedere in didTransiti sull'azione,

didTransition: (queryParams) -> 
    console.log(@get('queryParams')) 
5

Nella versione più recente brace è possibile ottenere il valore nel Route come

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    beforeModel(params){ 
     console.log(params.queryParams.test); //if the parameter contains test as the key 
    } 
}); 

Questo funziona solo se il LocationType è auto nel file environment.js.

5

Nella versione più recente di brace (2.12 al momento della stesura di questa risposta), queryParams si può accedere nel gancio modello come segue:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    queryParams: { 
     test: '' 
    }, 
    model(params) { 
     console.log(params.test); 
    }, 
}); 

Si osservi che la società sia segmento dinamico e queryParams sono accessibili tramite l'oggetto params. Poiché non è disponibile nel gancio beforeModel, questa soluzione funziona quando è necessario accedere allo queryParams nel gancio model.

Problemi correlati