2012-07-13 14 views
5

Estoy construyendo una aplicación web con CodeIgniter en la parte posterior y Backbone/RequireJS en la parte frontal. Como tal, no es una aplicación web de una sola página, sino que aún utiliza CI para muchas de las acciones del controlador y Backbone para varias vistas en diferentes momentos. Tengo RequireJS configuración/Backbone así:Uso de RequireJS y Backbone en diferentes páginas en una aplicación web CodeIgniter

<script type="text/javascript" data-main="main" src="require.js"></script> 

main.js parece:

require.config({ 
    paths: { 
      jquery: "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min", 
      underscore: "libs/underscore", 
      backbone: "libs/backbone", 
      //Lots of other stuff 
      }, 
    shim: { 
      backbone: { 
       deps: ["underscore", "jquery"], 
      } 
      // lots of other stuff 
    } 
    }); 

require(['views/app'], function(AppView){ 
    var app_view = new AppView; 
}); 

main.js se carga en mi plantilla maestra es decir, en cada página, y a su vez carga un montón de vistas que son comunes en todo el sitio/aplicación: encabezado, navegación, etc.

Pero en diferentes páginas también deseo cargar diferentes vistas además de las comunes. Así, por ejemplo, en una página llamada 'publicar' - casi una aplicación en sí mismo - que hago:

<script type="text/javascript" src="publish.js"></script> 

que se carga después de main.js y se parece a:

//publish.js 
require(['views/publishview], function(PublishView){ 
var publishView = new PublishView; 
}); 

Básicamente, funciona la mitad del tiempo, y la otra mitad (cuando martillo actualizar) obtengo 404 en todo.

¿Existe una forma clara de usar mi configuración básica de necesidad para todo, pero también requiere partes diferentes en momentos diferentes? Parece bastante fácil de hacer si todo fue un SPA, pero para mí, una gran parte de la aplicación todavía está en CodeIgniter.

Lo siento por no decir esto mejor.

Respuesta

1

No está seguro de si se trata de la manera correcta, pero lo que yo haría:

Plantilla (php)

<script type="text/javascript"> 
var myApp = {}; 
myApp.section = '<?= $section ?>'; //for exambple 'someSection' 
</script> 
<script type="text/javascript" data-main="main" src="require.js"></script> 

A continuación, utilice algo como:

(main.js)

var requires = { 
someSection: {files: ['views/app'], handler: function(AppView){ 
    var app_view = new AppView; 
}} 
}; 

var myRequire = requires[myApp.section] || null; 
if(myRequire) require(myRequire.files, myRequire.handler); 

O ... use window.location.pathname value en su lugar myApp.section

Cuestiones relacionadas