2012-07-13 35 views
5

Tôi đang xây dựng một ứng dụng web với CodeIgniter ở phía sau và Backbone/RequireJS ở phía trước. Như vậy, nó không phải là một trang web ứng dụng duy nhất, mà là vẫn sử dụng CI cho rất nhiều hành động điều khiển, và Backbone cho các khung nhìn khác nhau tại các thời điểm khác nhau. Tôi có RequireJS/Backbone thiết lập như thế này:Sử dụng RequireJS và Backbone trên các trang khác nhau trong ứng dụng web CodeIgniter

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

main.js trông giống như:

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 được nạp trong tổng thể của tôi Mẫu tức là trên mỗi trang, và đến lượt tải một loạt các lượt xem phổ biến trên toàn bộ trang web/ứng dụng - tiêu đề, điều hướng, v.v.

Nhưng trên các trang khác nhau, tôi cũng muốn tải các chế độ xem khác nhau. Vì vậy, ví dụ, trên một trang gọi là 'xuất bản' - gần như một ứng dụng của riêng mình - Tôi làm:

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

nào được nạp sau khi main.js và trông giống như:

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

Về cơ bản, nó làm việc một nửa thời gian, và một nửa khác (khi tôi làm mới búa) tôi nhận được 404 trên tất cả mọi thứ.

Vì vậy, có cách nào gọn gàng để sử dụng cấu hình yêu cầu cơ bản của tôi cho mọi thứ, nhưng cũng yêu cầu các phần khác nhau tại các thời điểm khác nhau? Nó có vẻ dễ dàng, đủ để làm nếu toàn bộ điều là một SPA, nhưng đối với tôi, một phần lớn các ứng dụng vẫn còn với CodeIgniter.

Xin lỗi vì không nói cách này tốt hơn.

Trả lời

1

Không chắc nếu nó đúng cách, nhưng những gì tôi sẽ làm gì:

Template (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> 

Sau đó, sử dụng một cái gì đó như:

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

Hoặc ... sử dụng giá trị window.location.pathname thay vì myApp.section

Các vấn đề liên quan