2013-05-14 35 views
32

Tôi muốn tạo một ứng dụng trong Meteor, từ những gì tôi hiểu hướng dẫn đầu tiên tải trong các thư mục con và sau đó theo thứ tự chữ cái. cấu trúc tập tin của tôi là như thế này ...chức năng gọi từ các tệp riêng biệt với Meteor

/server 
/lib 
/client 
    /lib 
     game.js -> already starts declaring the function "makeBoard(){}" 
    /template.js -> where the function "makeBoard()" is called. 

do đó dường như hàm lỗi "makeBoard()" không tồn tại, chỉ có tác dụng nếu tôi tuyên bố trong cùng một tập tin mà tôi muốn gọi nó. Ngay cả khi tôi di chuyển tệp "game.js" vào cùng thư mục chứa "template.js", nó sẽ xảy ra. Làm cách nào để tôi tham khảo chính xác các tài nguyên có trong các tệp khác nhau trên Meteor?

Trả lời

46

Xác định hàm bằng makeBoard = function() { ... }.

Các hàm được xác định với function foo() { ... } là cục bộ cho tệp, cũng như các biến được xác định bằng var bar = ....

+0

Đã khắc phục sự cố của tôi, cảm ơn. – Andy

+0

Với bản phát hành EMCA6, và cụ thể là thẻ '" sử dụng nghiêm ngặt "' cho mã javascript giải pháp này không biên dịch. Tôi mạnh mẽ đề nghị giải pháp @Shwaydogg vì lý do đó. – nchinda2

+0

Thao tác này chỉ hoạt động ở SIDE CLIENT. Xin vui lòng xem câu trả lời của Shwaydogg cho một sửa chữa SERVER phía bằng cách sử dụng Meteor.MyFunction.Method() – Andy

52

Sử dụng biến được xác định trên toàn cầu, như giới thiệu gợi ý, sẽ hoạt động, nhưng không phải là lựa chọn thiết kế mã được đề xuất (see JS mistake 1 listed here).

Thay vào đó trong thư mục lib của bạn, bạn có thể tạo ra một tập tin với:

Meteor.myFunctions = { 
... 
    makeBoard : function() { ... }, 
... 
} 

Sau đó, trong tập tin bất kỳ js khác mà bạn có thể gọi Meteor.myFunctions.makeBoard(). Điều này nên được thực hiện trong thư mục lib vì Meteor đảm bảo các tệp js trong lib được tải trước các thư mục khác, do đó chức năng của bạn sẽ được tải.

+3

Rất thông minh. Nếu bạn đang chia sẻ các chức năng từ nhiều tệp, điều này sẽ làm cho nó có thể: Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createinstanceclass'] = function() { trả về instanceclass mới(); } Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createolutionclass'] = function() { trả về giải pháp mớiClass(); } Nếu bạn đồng ý, hãy thêm nó vào câu trả lời của bạn; nếu không xin vui lòng giải thích làm thế nào để làm điều đó tốt hơn :) –

+0

CẢM ƠN BẠN. Cuối cùng có một số mã phía máy chủ tùy chỉnh đang chạy. Tôi đã thử chạy nó trên máy khách, và nó KHÔNG làm việc, như mong đợi. Tuyệt diệu. – Andy

+0

cảm ơn bạn, giúp – jremi

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