Tôi đang thay đổi một dự án từ một cấu trúc mô-đun trình duyệt theo kiểu "cũ" sang "mới" browser- hay-server-side-javascript mô-đun cấu trúc với require.js.phương pháp gọi trong module RequireJs từ các phần tử HTML như bộ xử lý onclick
Trên client Tôi đang sử dụng một ngoại vi tổ chức jQuery, vì vậy tôi bắt đầu từ ví dụ họ đưa ra trong kỹ thuật "use priority config" của README:
<title>My Page</title>
<script src="scripts/require.js"></script>
<script>
require({
baseUrl: 'scripts',
paths: {
jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min',
jqueryui: ...,
...
... // bunch more paths here
},
priority: ['jquery']
}, [ 'main' ]);
</script>
này được thực sự làm việc ổn thôi. Nhưng tôi muốn xuất chức năng từ chính sang trang web HTML. Ví dụ:
<a class="button" href="#" onclick="MyApi.foo();">
<img src="foo.png" alt="foo" />Click for: <b>Foo!</b>
</a>
Trước khi lắp vào kiểu mô-đun bộ xử lý AMD, tôi đã tiếp xúc với chức năng từ các tập tin khác nhau của tôi bằng cách tạo ra một đối tượng từ điển trong không gian toàn cầu:
// main.js
var MyApi = {};
jQuery(document).ready(function($) {
// ...unexported code goes here...
// export function via MyApi
MyApi.foo = function() {
alert("Foo!");
};
});
Nhưng tôi không biết cách tiếp cận đúng trong require.js là gì. Có thể đặt các câu lệnh require
vào HTML của các thẻ <script>
và sau đó đặt tên mô-đun để nó có thể được sử dụng từ bên trong trang web không? Hoặc điều này luôn luôn được thực hiện tự động bên trong main.js, chẳng hạn như $('#foobutton').click(...)
?
Xin chào, cảm ơn (chỉ cần quay lại dự án này và xem chi tiết câu trả lời). Bạn đưa vào các từ lý do tại sao việc đặt mã trong onclick không phù hợp với phương pháp này; trình xử lý trực tiếp trong HTML của trang sẽ yêu cầu bất kỳ API nào họ gọi để có cùng tên được nhập trên tất cả các tệp .js được tải (er ... phải không?). Nhưng bởi mã thông báo đó ... trong mẫu này, không nên page.js phải đề cập rõ ràng về ánh xạ jquery thành '$' thay vì thừa hưởng rằng chỉ vì đó là những gì foo đã nhập nó như là? – HostileFork
Tôi luôn nghĩ về các mô-đun theo nghĩa là chúng có thể sử dụng lại được, các bit được phân loại. Nhưng với cách tiếp cận này mọi thứ phải được ném vào một mô-đun và không có sự phân biệt rõ ràng giữa các công cụ thông thường như ràng buộc sự kiện và các mô-đun thực tế - nếu bạn hiểu ý tôi. Có không có cách nào khác? – backdesk
Trong câu hỏi, DOM phụ thuộc vào đối tượng MMyApi toàn cầu. Trong câu trả lời này, mô-đun trang phụ thuộc vào DOM, cũng là toàn cục. Phải có một số loại phụ thuộc. Mà một trong những sử dụng có lẽ là một sự lựa chọn chủ quan. –