2012-09-04 18 views
9

Devo creare una vista di base che estenda tutte le mie viste. Non sono sicuro di dove e quando dichiarare questa vista.Come creare una vista base in backbone.js?

Fondamentalmente, ho bisogno di iniettare global variables in tutti i miei modelli e non lo faccio in tutti i metodi render().

questo è il mio struttura ad albero, per ora:

|-main.js 
|-app.js 
|-require.js 
|-App 
| |-View 
| | |-Dashboard.js 
| | |-Header.js 
| | |-Content.js 
| |-Model 
| |-Collection 
| |-Template 
| 
|-Libs 
    |-... 

questo è il mio app.js

var App = { 
    ApiURL: "http://domain.local", 
    View: {}, 
    Model: {}, 
    Collection: {}, 
    Registry: {}, 
    Router: null 
}; 

define(['backbone', 'View/Dashboard'], function(Backbone){ 
    var AppRouter = Backbone.Router.extend({ 
     routes : { 
      "dashboard": "index", 
     }, 

     index: function() { 
      console.log('routing index route...'); 
      var x = new App.View.Dashboard({el:$('#main-content'), type:'other'}); 
     } 
    }); 

    var initialize = function() { 
     App.Router = new AppRouter; 
     Backbone.history.start({pushState: true}); 
     console.log('Backbone is running...'); 
    }; 

    return { 
     initialize : initialize 
    }; 
}); 

E per ora tutta la mia vista ereditano da Backbone.View come questo:

App.View.Dashboard = Backbone.View.extend({ 

Voglio creare il mio Base View che tutte le viste dall'applicazione wou ld si estende. Questo è quello che ho fatto fino ad ora, ma non so dove posizionare questo pezzo di codice perché in app.js sto caricando la vista Dashboard quindi ho bisogno di farlo prima, ma ho bisogno di richiedere questa base vista degli oggetti in tutte le viste ... così mi sono perso :(

define(['backbone', 'underscore', 'twig'], function(Backbone, _){ 

    App.View.Base = Backbone.View.extend({}); 
    _.extends(App.View.Base.prototype, { 
     initialize: function(params) 
     { 
      this.el = params.el; 
      this.init(params); 
     }, 

     init: function(params) 
     { 
     }, 

     renderTemplate:function(template_path, data) 
     { 
      var tpl = twig({href:template_path, async:false}); 

      // Inject variables 
      data.user = App.Registry.User; 
      data.account = App.Registry.Account; 

      return tpl.render(data); 
     } 
    }); 

}); 

qualsiasi idea o osservazioni sono benvenuti Una risposta sarebbe la migliore:. D

Grazie, Maxime

risposta

11
App.View.Base = Backbone.View.extend({ 
    baseMethod: function(params) {}; 
}); 

App.ExtendedView.Base = App.View.Base.extend({ 
    // new stuff here 

    // overriding App.View.Base.baseMethod 
    baseMethod: function(params) { 
    // overriding stuff here 
    App.View.Base.prototype.baseMethod.call(this, params); // calling super.baseMethod() 
    } 
}); 
.
+0

Ho finito per farlo in un altro modo ma questa risposta sembra la migliore per la mia domanda;) – maxwell2022

Problemi correlati