在CodeIgniter Web应用程序中的不同页面上使用RequireJS和Backbone

时间:2012-07-13 21:25:09

标签: codeigniter backbone.js requirejs

我正在构建一个Web应用程序,后面是CodeIgniter,前面是Backbone / RequireJS。因此,它不是单页面Web应用程序,而是仍然在许多控制器操作中使用CI,而在不同时间使用Backbone用于各种视图。我有这样的RequireJS / Backbone设置:

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

main.js看起来像:

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加载在我的主模板中,即在每个页面上,然后加载一堆在整个站点/应用程序中常见的视图 - 标题,导航等。

但是在不同的页面上,除了常见的视图之外,我还想加载不同的视图。因此,例如,在一个名为“发布”的页面上 - 几乎就是一个应用本身 - 我这样做:

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

在main.js之后加载,看起来像:

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

基本上,它的工作时间是一半,而另一半(当我刷新时)我在所有的东西上都有404.

那么有一种巧妙的方法可以将我的基本需求配置用于所有内容,但是在不同时间也需要不同的部分吗?如果整个事情都是SPA,这似乎很容易做到,但对我来说,应用程序的很大一部分仍然是CodeIgniter。

很抱歉没有更好的措辞。

1 个答案:

答案 0 :(得分:1)

不确定这是否正确,但我会做什么:

模板(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>

然后,使用类似的东西:

(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);

或者......使用window.location.pathname值代替myApp.section