99 parâmetros de roteador na parede, 99 parâmetros de roteador, retire um, passe adiante, 98 parâmetros de roteador, etc. etc.

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 doLookupfunçã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 gendere state. Agora observe que eles não estão anexados ao thisobjeto (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 @optionsobjeto, 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.genderurl

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.