2012-04-17 43 views
11

thể trùng lặp:
How to load bootstrapped models in Backbone.js while using AMD (require.js)biến toàn cầu trong requireJS

Đây là một bản demo đơn giản về vấn đề của tôi.

Tôi cần truy cập vào id_user trong tệp main.js. Câu hỏi của tôi là, làm thế nào để tránh các biến toàn cầu trong tình huống này? Thực hành xấu có sử dụng các biến toàn cầu cho mục đích này không?

main.js

require({ 
    paths : { 
     jQuery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min' 
    } 
}); 

require([ 'jQuery' ], function() { 
     alert(id_user); 
    }); 

index.php

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

<script type="text/javascript"> 
function users() { 
    id_user = <?php echo $id; ?> 
} 

users(); 
</script> 
+0

Tôi muốn nói rằng bạn không nhận được một biến toàn cầu. Nhưng sử dụng nhiều hơn là một thực tế xấu :-) – Bergi

Trả lời

10

Không nên có bất kỳ biến toàn cầu cho việc sử dụng như vậy trong các dự án sử dụng requirejs vì nó là để xử lý mô-đun và tất cả các mô-đun (và các thuộc tính/phương thức của chúng) không bao giờ được khai báo trên toàn cầu để giữ cho môi trường đẹp và sạch sẽ. Nếu bạn cần một mô-đun để sử dụng một bộ biến trong một mô-đun khác thì họ nên nói chuyện với nhau thông qua một số API hoặc có biến được đặt làm thuộc tính, yêu cầu mô-đun và lấy thuộc tính theo cách đó.

Nhưng có thể bạn nên tự hỏi mình có thực sự cần requirej không. Nếu bạn muốn xây dựng một mô-đun thích hợp dựa trên ứng dụng (mà tôi không chắc chắn bạn là nếu bạn tự hỏi làm thế nào để vượt qua biến xung quanh) thì có, nếu tất cả các bạn muốn là tải vài tập tin từ JS sau đó LazyLoad (http: // www. appelsiini.net/projects/lazyload) có lẽ là câu trả lời. Chỉ cần nói rằng nó có giá trị suy nghĩ về tùy thuộc vào trường hợp của bạn đặc biệt xem xét các dấu chân của requirejs.

+2

Một cách hacky để vượt qua biến xung quanh là đặt chúng trong DOM trong một và chỉ lấy thuộc tính value. – GillesC

+0

nhưng trong một trường hợp đơn giản, nơi cần thiết để chuyển một biến php sang main.js. Bạn đang nói về loại API nào? –

+2

Bạn nên khai báo một mô-đun đang giữ giá trị. như requirejs được nạp ngay trên bạn sẽ có thể xác định ('user', {id: }); và sau đó từ main.js yêu cầu ('user', function (user) {console.log (user.id)}); – GillesC