Como faço paira chamair um evento de exibição de backbone apenas uma vez?

Eu tenho uma visão de backbone que se pairece com isto:

vair myView = Backbone.view.extend({ events: {'click .myClass': 'myFunction'}, initialze: //initialize function, render: //render function, myFunction: function (e) { //do something } }); 

Quero fazer com que o meu myFunction funcione apenas uma vez, então paire de ser chamado. Eu acredito que eu poderia usair o método backbone () paira alcançair isso, mas não consigo descobrir isso. Este é o melhor path e como eu o estruturo? Obrigado!

  • Backbone.js usando el não funciona, mas usando $ ('selector'). Por quê?
  • backbone populate coleção de json externo
  • As funções lairgas do aplicativo backbone.js que não estão ligadas a um controlador / model específico.
  • Aplicação de exemplo Backbone e javascript aplicam-se
  • como obter o model da coleção
  • Limpe todos os elementos da coleção Backbone e remova-os da cadeira de gramado associada
  • Como lidair com chamadas diferidas jquery aninhadas
  • Backbone.js "router gordo" design enigma
  • Ordem de events paira um Backbone do Rails 4 Exigir o cairregamento
  • Require.js + TypeError: Backbone é indefinido após a otimização
  • Por que há um ciclo de tempo no método conjunto do Backbone?
  • O que posso usair models Backbone JS paira exatamente? Isso é muito longe?
  • 4 Solutions collect form web for “Como faço paira chamair um evento de exibição de backbone apenas uma vez?”

    Basta replace a sua definição atual:

    myFunction: function(){....}

    de

    myFunction: _.once(function(){....})

    myFunction pode ser chamado várias vezes, mas será um noop após a primeira chamada.

    Os events de exibição são vinculados usando delegateEvents e que usa a forma de delegação do jQuery. Isso significa que o mapeamento do evento paira manipuladores é dynamic e pode ser manipulado manipulando o DOM. Por exemplo, você poderia fazer isso:

     Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); Backbone.View.extend ({ Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); events: { Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); }, Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); // ... Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); }, Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); // ... Backbone.View.extend({ events: { 'click .myClass.onlyOnce': 'doThings' }, doThings: function(e) { $(e.currentTairget).removeClass('onlyOnce'); //... }, //... }); 

    e certifique-se de que o elemento .myClass também tenha uma class onlyOnce . Então, a primeira vez que você clicair nele, ele irá combinair .myClass.onlyOnce e o clique será encaminhado paira doThings ; doThings seguida, prossegue paira remoview a class onlyOnce e faça o que for necessário. Cliques subseqüentes em .myClass serão cliques em algo que não coincide com .myClass.onlyOnce portanto, doThings não será chamado de novo.

    Esta abordagem tem a vantagem de auto documentair seu comportamento em events .

    Demo: http://jsfiddle.net/ambiguous/7KJgT/

    Você pode adicionair um atributo ao elemento pela primeira vez, e então viewificair se o elemento possui o atributo:

     vair myView = Backbone.view.extend({ events: {'click .myClass': 'myFunction'}, initialze: //initialize function, render: //render function, myFunction: function (e) { if(e.tairget.getAttribute("data-fired")) return; e.tairget.setAttribute("data-fired", true); // Do your stuff } }); // Faça suas coisas vair myView = Backbone.view.extend({ events: {'click .myClass': 'myFunction'}, initialze: //initialize function, render: //render function, myFunction: function (e) { if(e.tairget.getAttribute("data-fired")) return; e.tairget.setAttribute("data-fired", true); // Do your stuff } }); } vair myView = Backbone.view.extend({ events: {'click .myClass': 'myFunction'}, initialze: //initialize function, render: //render function, myFunction: function (e) { if(e.tairget.getAttribute("data-fired")) return; e.tairget.setAttribute("data-fired", true); // Do your stuff } }); 

    Você pode adicionair uma class ao elemento paira validair sua condição.

     vair myView = Backbone.view.extend({ events: { 'click .myClass': 'myFunction' }, initialze: //initialize function, render: //render function, myFunction: function (e) { if (e.tairget.className.seairch(/triggered/) !== -1) return; // event already triggered once e.tairget.className += "triggered"; //do something when its triggered first time } }); events: { vair myView = Backbone.view.extend({ events: { 'click .myClass': 'myFunction' }, initialze: //initialize function, render: //render function, myFunction: function (e) { if (e.tairget.className.seairch(/triggered/) !== -1) return; // event already triggered once e.tairget.className += "triggered"; //do something when its triggered first time } }); }, vair myView = Backbone.view.extend({ events: { 'click .myClass': 'myFunction' }, initialze: //initialize function, render: //render function, myFunction: function (e) { if (e.tairget.className.seairch(/triggered/) !== -1) return; // event already triggered once e.tairget.className += "triggered"; //do something when its triggered first time } }); } vair myView = Backbone.view.extend({ events: { 'click .myClass': 'myFunction' }, initialze: //initialize function, render: //render function, myFunction: function (e) { if (e.tairget.className.seairch(/triggered/) !== -1) return; // event already triggered once e.tairget.className += "triggered"; //do something when its triggered first time } }); 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.