2013-04-10 21 views
5

Tôi đang xây dựng một ứng dụng trên Pi-engine (một công cụ ứng dụng php dựa trên khung công tác zend 2).Có cách nào để đặt baseurl động trong require.js không?

Trong ứng dụng của tôi, đường dẫn tệp javascript tùy thuộc vào tên ứng dụng, trong khi tên ứng dụng là được trình cài đặt chọn.

Ví dụ url của require.js sẽ là:

http://my.site.name/asset/module-{module_name}/script/js/require.js

thay đổi module_name theo những gì đặt tên cho ứng dụng được đưa ra.

Tôi biết tôi có thể đặt đường dẫn trong thuộc tính 'dữ liệu chính' trong backend như:

<script data-main="/asset/module-{module_name}/script/" src="/asset/module-{module_name}/script/js/require.js"></script> 

Nhưng tôi muốn biết là có cách nào để thiết lập baseurl dynamicly sử dụng javascript để tôi không cần để chạm vào chương trình phụ trợ.

Trả lời

0

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn có thể sử dụng 'baseUrl' trong đối tượng cấu hình nơi bạn có thể đặt đường dẫn nơi tìm thấy tệp js.

require.config({ 
    baseUrl: "/js/" 
}); 
+0

Nếu tôi sử dụng 'baseUrl: "/ js /"', các đường dẫn yêu cầu trở thành 'http: // my.site.name/js/target.js'. – user1522830

10

http://requirejs.org/docs/api.html#config

Ngoài ra, bạn có thể xác định đối tượng cấu hình như biến toàn cầu đòi hỏi trước require.js được nạp, và có giá trị áp dụng tự động. Ví dụ này quy định cụ thể một số phụ thuộc vào tải ngay khi định nghĩa require.js require():

<script> 
    var require = { 
     baseUrl: generateBaseUrl() 
    }; 
</script> 
<script src="scripts/require.js"></script> 
0

Cảm ơn bạn đã trả lời, tôi chỉ tìm thấy một giải pháp sử dụng javascript trên trang: how to get the absolute path of the current javascript file name

var scripts = document.getElementsByTagName("script"); 

require.config({ 
    baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] + 'script/', 
}); 

Nó có vẻ lạ nhưng nó hoạt động.

0

Để tránh ô nhiễm về phạm vi toàn cầu, bạn có thể quấn đang cấu hình động như trong trường hợp của bạn trong một chức năng ngay lập tức thực hiện:

require.config((function(){ 
    var scripts = document.getElementsByTagName("script"); 
    return { 
     baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] 
    }; 
})()); 
Các vấn đề liên quan