Domanda

Ho creato un nuovo widget di backbone.js modello che spero di estendere:

        var Widget = Backbone.Model.extend({
            constructor: function() {
              console.log('Widget constructor called.');
            }
        });

A seconda della pagina di un utente visualizza una serie di widget viene caricato tramite Ajax, così per ciascun widget farò qualcosa di simile:

        $.getScript('widgets/widget1', function(xhr){
            var widget1 = new pieChartWidget();
            widget1.render();
            widget1.update();
        });

Contenuti di "widgets / widget1":

$(function() {

    var pieChartWidget = Widget.extend({
            render: function(json) {
              console.log('Widget render called.'); 
            },
            update: function(json) {
              console.log('Widget update called.'); 
            }
    });

});

Nel mio Firebug console ottengo "pieChartWidget è non definito". So che il Javascript viene caricata con successo, non riesco proprio a estendere il modello "Widget" da esso.

È stato utile?

Soluzione

Il widget viene definita all'interno di una funzione. Quindi tutto variabile dichiarata ci sono visibili solo withing quindi funzioni portata.

$(function() {

  var pieChartWidget;

  // pieChartWidget is only visible here!

});

// pieChartWidget not visible here!

Per accedere al widget al di fuori della funzione è necessario assegnarlo a una variabile globale (ad es. Le applicazioni dello spazio dei nomi). Si potrebbe anche finestra (non il modo preferito) utilizzare.

Il tuo codice dovrebbe funzionare invariato se si assegna il tuo widget di finestra in questo modo:

$(function() {

  window.pieChartWidget = Widget.extend({
        render: function(json) {
          console.log('Widget render called.'); 
        },
        update: function(json) {
          console.log('Widget update called.'); 
        }
});

});

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top