2012-07-13 85 views
5

我建立一个web应用程序使用CodeIgniter在前面的背部和骨干/ RequireJS使用RequireJS并在不同的页面骨干。因此,它不是一个单一的网页应用程序,而是仍然使用CI来执行很多控制器操作,并且在不同的时间使用Backbone来处理各种视图。我有RequireJS /骨干网的设置是这样的:的笨web应用程序

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

基本上,它工作一半的时间,另一半(当我锤子刷新)我得到404s的一切。

那么,有没有用我的基本需要的一切配置一个整洁的方式,但也需要在不同的时间不同的部分?如果整个事情都是SPA,似乎很容易,但对我来说,应用的很大一部分仍然是CodeIgniter。

对不起,不措辞这更好。

回答

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