2013-08-09 29 views
8

Tôi mới dùng meteor và coffeescript. Tôi đang sử dụng bố cục tệp được đề xuất trong Câu hỏi thường gặp về Meteor không chính thức. Trong bộ sưu tập tập tin/C.coffee, tôi cóTrong thiên thạch 0.6.4.1/coffeescript, mức độ hiển thị biến hoạt động như thế nào?

C = new Meteor.Collection 'C' 
console.log "C: #{C}" 

trong tập tin máy chủ/main.coffee, tôi có

C.insert {test: 'test'} 

Khi tôi bắt đầu sao băng, tôi thấy trên bàn điều khiển:

C: [object Object] 
ReferenceError: C is not defined 
    at app/server/main.coffee.js:5:1 
    at /home/xxx/yyy/.meteor/local/build/server/server.js:298:12 

Làm cách nào để tạo C khả dụng trong các tệp bên ngoài bộ sưu tập/C.coffee?

Cập nhật: Thêm @ to C khắc phục sự cố ở cấp cao nhất. Tuy nhiên nó vẫn không thành công với:

Meteor.methods 
     test: (statement) -> 
      @C.insert {test: 'test'} 

Nó không thành công với một lỗi TypeError: Cannot call method 'insert' of undefined

+0

http://stackoverflow.com/questions/15831144/global-classes-with-meteor-0-6-0-and-coffeescript Bạn phải sử dụng @ ở phía trước C – Suburbio

+0

Cảm ơn, Subrubio. Bất kỳ đề xuất nào về ví dụ cập nhật của tôi? – Jerry

+0

Bạn chỉ cần sử dụng @/this khi bạn đặt biến toàn cục. – Suburbio

Trả lời

13

Để làm cho C có thể nhìn thấy bên ngoài các tập tin đó đã được xác định trong sử dụng @, mà biên dịch để this. hoặc window. trong js, mang đến cho nó trở thành cùng tác dụng như một phạm vi toàn cầu:

@C = new Meteor.Collection 'C' 
+0

Cảm ơn. Tôi đã thử một lần và nó thất bại, vì vậy tôi nghĩ rằng nó đã sai. Nó hoạt động tốt ở cấp cao nhất. Nhưng tôi cũng đang cố gắng sử dụng C bên trong một cuộc gọi Meteor.methods. Có sự tương đương với cửa sổ không. ở phía máy chủ? – Jerry

+0

Ở phía máy chủ, tôi nghĩ rằng nó sẽ thực hiện 'this.' thay vì không có cửa sổ trên máy chủ – Akshat

+0

Vui lòng xem ví dụ đã cập nhật của tôi. @ bên trong của test() trỏ đến một cái gì đó khác nhau. – Jerry

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