Então, digamos que você esteja desenvolvendo um aplicativo que usa parâmetros de roteador de backbone para orientar solicitações para seu back-end RESTful. Por exemplo, você desenvolveu um aplicativo backbone de página única que mostra o número de meninas ou o número de meninos em um determinado estado *.
Seu roteador pode ser parecido com isto (em coffeescript)
class MyApp.Routers.GenderedStates extends Backbone.Router
routes:
"query/:gender/:state" : "doLookup"
E o back-end da API aceita uma solicitação como esta **:
GET /query/boys/ny.json #return the number of boys in NY state
Portanto, sua doLookup
função no roteador primeiro terá que levar esses parâmetros
doLookup: (gênero, estado) ->
E passe-os para a vista
@appView ||= new MyApp.Views.GenderState({
el: $('#app')
gender: gender
state: state
})
@appView.render()
Então, agora, em sua camada de visualização:
class MyApp.Views.GenderState extends Backbone.View
Podemos pegar as variáveis gender
e state
. Agora observe que eles não estão anexados ao this
objeto (como @el
) é. Em vez disso, eles vivem no objeto de opções.
#still in the view layer
initialize: =>
GenderCount = MyApp.Collections.GenderCount({
gender: @options.gender
state: @options.state
})
OK legal. Com o @options
objeto, você pode acessar os parâmetros que adicionou ao criar a visualização. Agora, para acessar os parâmetros na coleção, você precisará adicionar algum código ao inicializador.
class MyApp.Collections.GenderCount extends Backbone.Collection
intialize: (options) => #oh hai options object!
@gender = options.gender
@state = options.state
Legal! Agora sua coleção está armazenando o valor das opções que você passou ao criá-la e elas estão acessÃveis em todo o objeto.
Agora, todo o objetivo deste exercÃcio era ser capaz de atribuir dinamicamente um url
à coleção com base nas coisas do roteador. Observe como isso não funciona:
#still in the collection layer
url: '/query/' + @gender + '/' +@state + '.json'
Isso porque deve ser avaliado! O truque é fazer a função que retorna uma string:this.gender
url
url: ->
'/query/' + @gender + '/' +@state + '.json'
E é assim que você pode atribuir parâmetros aleatórios e arbitrários a basicamente qualquer objeto Backbone. Observe como, neste exemplo, os parâmetros não foram aleatórios ou arbitrários, mas basicamente as variáveis ​​do roteador foram copiadas em toda a pilha (Roteador, Visualização, Coleção)
E agora você pode cantar a música que é o tÃtulo do post!
* Claro, se você está escrevendo um aplicativo que atribui pessoas em papéis binários de gênero, você está fazendo isso errado.
** Por que não fazer com que o backend retorne os números de todos os estados e cuide da seleção na coleção do app – QUIET! O objetivo deste exemplo é mostrar como passar variáveis ​​do roteador pelo aplicativo.