Existe uma regra de ouro para decidir quando usar gatilho ou triggerMethod na Espinha dorsal.Marionete?
-
22-12-2019 - |
Pergunta
Eu estou jogando um pouco com Backbone.js
e Backbone.Marionette
e eu gostaria de saber qual a diferença entre trigger
e triggerMethod
.
Em particular, existe alguma regra de ouro para decidir quando usar o primeiro ou o último?
Em minha mente eventos, por exemplo, são úteis para a comunicação entre um elemento do DOM e seu ponto de vista.
triggerMethod
é usado em Marionete para atualização em cascata diferentes componentes, por exemplo,um layout chama a show
método para seus filhos (as crianças respondem à onShow
).Então, para mim é o mesmo que chamar um método direto sobre ele.Isso é verdade?
O que sobre trigger
?
Obrigado antecipadamente.
Solução
Não há uma diferença enorme, e ele simplesmente depende do que você quer fazer...
trigger
irá disparar um eventotriggerMethod
irá disparar um evento E chamar um método correspondente de acordo com a convenção de nomenclatura (ver https://marionettejs.com/docs/v2.1.0/marionette.functions.html#marionettetriggermethod)
Obviamente, se você quiser apenas para acionar um evento, você pode usar trigger
.Mas usando trigger
você também criar um "home made" triggerMethod implementação: trigger
o evento, então, um ouvinte que vai chamar a função que você deseja.
Então, o que sobre triggerMethod
?Como mencionado acima, ele irá disparar um evento e chamar um método.Então, se o seu único objetivo é chamar o método, em primeiro lugar, não há necessariamente uma necessidade para o uso de triggerMethod
.
Então, por que seria um uso triggerMethod
em tudo?Porque dá a você "ganchos" para adicionar a funcionalidade de ouvintes de evento.No meu livro sobre Marionete, por exemplo, há uma triggerMethod
chamada em https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L24 para exibir mensagens de erro em um formulário.O mesmo poderia ser alcançado ao simplesmente chamar
view.onFormDataInvalid(contact.validationError);
Mas, como mencionado acima, triggerMethod
dê-nos um "gancho" para uso posterior.Por exemplo, vamos supor que eu queira adicionar o log de erros do usuário:Eu posso simplesmente adicionar um ouvinte para o meu ponto de vista:
initialize: function(){
this.on("form:data:invalid", function(validationError){
// log error here
}
}
Esta adição de funcionalidade pode ser adicionada sem afetar o resto do código, pois temos usado triggerMethod
em vez de um método direto de chamada.Além disso, será mais fácil para testar mais tarde (pequenos testes, com ponto único de falha):
- teste que "formulário:dados:erro de" evento é acionado quando um usuário insere informações incorretas
- teste que quando "formulário:dados:erro de" evento é acionado, o erro é registrado
- etc.
Outras dicas
trigger(name)
- Parte de
Backbone.js
- Dispara o evento usando o nome passado
triggerMethod(name)
- Parte de
Marionnete.js
- Faz de tudo
trigger(name)
não Também chamadas de métodos pré-definidos convenção de nomenclatura.
por exemplo.
triggerMethod('foo')
vai chamaronFoo()
por exemplo.
triggerMethod('foo:bar')
vai chamaronFooBar()