2013-09-23 11 views
9

Solo una cosa che cerco di fare mi semplificherà davvero la vita in questo momento.Chiama una funzione all'interno di un modello di sottolineatura utilizzando il backbone

Come posso farlo:

Questa è la mia opinione nel file app

window.ArtView = Backbone.View.extend({ 
     template:_.template($('#art').html()), 
     render:function (eventName) { 
      var output="blablbla"; 
      $(this.el).html(this.template({"output":output})); 
      return this; 
     } 
    }); 
    ... 
    // function that I would like to call 
    function callFunction(){ 
     console.log('it works!'); 
    } 

Template in index.html

<script type="text/tempate" id="art"> 
     <div data-role="header" class="header" data-position="fixed"> 
      <a href="#" data-icon="back" class="back ui-btn-left">Back</a> 
     </div> 
     <div data-role="content" class="content"> 
      callFunction(); 
      <% console.log(output) %> 
     </div> 
</script> 

Come posso chiamare CallFunction() dentro il mio modello o qualcosa di simile?

Qualche idea?

Grazie!

+3

Tenere i modelli a secco. I tuoi modelli non dovrebbero contenere alcuna logica. – TYRONEMICHAEL

+0

Vero, ma penso che ci siano casi da utilizzare per chiamare le funzioni dai modelli. –

risposta

15

Credo che sia possibile chiamare funzioni all'interno del modello purché l'oggetto per il modello abbia la funzione.

render:function (eventName) { 
    var output="blablbla"; 
    var data = _.extend({"output":output}, callFunction); 
    $(this.el).html(this.template(data)); 
    return this; 
} 

poi nel modello:

<%= callFunction() %> 
0

Questo è sbagliato. Pensa al modello come a una stringa, markup html. Si ottiene e sostituirne alcune parti con i dati effettivi. Se vuoi fare qualche manipolazione DOM, dovrebbero essere fatti dopo. Facci sapere cosa vuoi fare in callFunction e potremmo guidarti nel posto giusto per quella logica.

+0

Sì, hai ragione, ci ho pensato. Vorrei che callFunction() sia una chiamata di jPlayer (un jquery media player), che ha bisogno di una fonte (url.mp3). L'URL della sorgente è nella mia versione. Un po 'complicato no? –

3

questo è come ho fatto, funziona benissimo.

template: _.template(templateText , { 
      imports : { 
       check :function (val){ 
        // blah blah 
        } 
       } 
      } 
     }), 

poi nel vostro modello HTML

<%= check('value') %> 
Problemi correlati