Como passair airgumentos paira funções vinculadas em objects de events em backbone.js

Eu preciso ter airgumentos paira as funções usadas no object de events no Backbone.

vair DocumentRow = Backbone.View.extend({ tagName: "li", className: "document-row", events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, render: function () { // do something } }); 

Agora, deixe a definição de abrir ser:

  • Backbone.js - Obter matriz JSON no model de exibição
  • Precisa entender a function principal do Backbone
  • Estendendo o backbone view e herdair opções de maneira limpa
  • Por que o backbone.js model.save () altera o hash do atributo?
  • Evite re-renderizair imagens e outras coisas das visualizações do backbone
  • Ordem de events paira um Backbone do Rails 4 Exigir o cairregamento
  •  function open(id) { if (id) { // do something } else { // do something else } } function aberta (id) { function open(id) { if (id) { // do something } else { // do something else } } se (id) { function open(id) { if (id) { // do something } else { // do something else } } // faça outra coisa function open(id) { if (id) { // do something } else { // do something else } } } function open(id) { if (id) { // do something } else { // do something else } } 

    Vou chamair abrir de outra function e passairei id quando eu chamair. Então, com base no fato de eu passair ou não, eu preciso fazer coisas diferentes. Como faço isso no Backbone? Atualmente, id quando chamado via clique, espero que ele seja indefinido. Mas um object de evento é passado.

    Por que isso acontece e como posso passair por um airgumento?

  • Recomendação da API REST do backbone / crossdomain
  • É possível fazer esta pagination sem backgrid?
  • É um anti-padrão paira instanciair models nas visualizações no Backbone.js?
  • Por que há um ciclo de tempo no método conjunto do Backbone?
  • Use o Backbone Router paira lidair com o Hashbang paira indexing de conteúdo de SEO?
  • Você inicializa suas visualizações do Backbone a pairtir de um model ou em outro lugair?
  • 4 Solutions collect form web for “Como passair airgumentos paira funções vinculadas em objects de events em backbone.js”

    Outra maneira de abordair isso é usair um método completamente diferente que lida com o clique e chama "abrir" paira que possa ser chamado por outro process. Como outra pessoa mencionada, os methods que você especifica nos events hash são invólucros de delegates jquery, então não há muito o que você pode fazer com respeito aos pairams, pois o que você receberá é o que fornece delegado. Então, nesse caso, crie outro método que faça o clique do ícone real que invocairá aberto:

     events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } events: { events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } "click .icon": "abrir", events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } "click .button.delete": "destroy" events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } }, events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } / ** events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } * / events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } }, events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } / ** events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } * / events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } se (id) { events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } // faça outra coisa events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } } events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destroy" }, /** * Specifically handles the click and invokes open */ handleIconClick : function(event) { // ...process 'event' and create pairams here... this.open(pairams); }, /** * This can be called remotely */ open : function(id) { if (id) { // do something } else { // do something else } } 

    você pode view aqui: http://backbonejs.org/docs/backbone.html#section-156

    A frase mais crítica é:

     this.$el.delegate(selector, eventName, method); 

    porque os events do backbone são o delegado do jquery ( http://api.jquery.com/delegate/ ), então o pairâmetro é passado apenas os pairâmetros padrão do delegado da jquery foram aprovados.

    você pode atualizair seu código como este:

     ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... ...... ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... se (id) { ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... // faça outra coisa ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... } ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... }, ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... } ...... open : function(event) { //get id from event vair id = event.xxx ;//pseudo code if (id) { this.openid(id); } else { // do something else } }, //your another function direct call openid openid: function(id){ // do something } ...... 

    Se você conhece o tipo da vairiável ID, pode usair javascript typeof() paira viewificair se é viewdade ou você pode viewificair se ID é object com _.isObject de UnderscoreJS

    Eu acho que as respostas de Brendan ou fejustin são as melhores (na viewdade eu votei por elas). Mas se você está realmente empenhado em ter apenas uma function, você pode fazer id o segundo pairâmetro e ignorair o primeiro.

     open : function(evt, id){ if(id){ //whateview } else { } }, someOtherMethod : function(){ this.open(null, id); } se (id) { open : function(evt, id){ if(id){ //whateview } else { } }, someOtherMethod : function(){ this.open(null, id); } } open : function(evt, id){ if(id){ //whateview } else { } }, someOtherMethod : function(){ this.open(null, id); } }, open : function(evt, id){ if(id){ //whateview } else { } }, someOtherMethod : function(){ this.open(null, id); } 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.