2011-09-23 45 views
12

Nếu tôi có một lớp Coffeescript được định nghĩa trong một tệp riêng biệt mà tôi đang gọi từ tập lệnh chính của mình. Tôi có thể làm cho các chức năng trong tập tin có thể nhìn thấy trên toàn cầu, nhưng không phải là lớp.Xuất một lớp học từ một tệp Coffeescript

tập tin bao gồm là:

root = exports ? this 

root.add = (a, b) -> 

     return a + b 

class root.userModel 
     username: 'Aaaa' 
     name: 'Bbbb' 

tôi có thể truy cập vào các chức năng từ mã chính của tôi. Làm cách nào để tạo lớp học?

+0

Tôi đã thử mã của bạn ở đây và đã không có vấn đề trong việc tiếp cận các lớp. Nếu tôi gọi 'u = new test.userModel()' thì 'u' sẽ chứa một đối tượng, như mong đợi, và đối tượng sẽ là một thể hiện của' test.userModel' (tệp tôi đã sử dụng để thử nghiệm là 'test.coffee 'và nhập khẩu nó với' test = require './test'') – brandizzi

+0

Cảm ơn sự giúp đỡ của mọi người. Vấn đề là do một vấn đề truy cập vào lớp trong phần chính của mã – tooba

Trả lời

6

Mã của bạn thực sự sẽ tạo userModel toàn cầu, giả sử rằng exports không được xác định và thiswindow. Nếu bạn gặp sự cố, hãy kiểm tra các điều kiện đó.

2

Biểu mẫu class ... là biểu thức trả về giá trị. Vì vậy, bạn sẽ muốn gán kết quả của biểu thức class đó vào thuộc tính trên đối tượng xuất của bạn. Cũng giống như vậy:

root.userModel = class userModel 
    username: 'Aaaa' 
    name: 'Bbbb' 

Cập nhật:

Rất tiếc, không đúng sự thật, nên hoạt động tốt hoặc là class root.userModel hay như root.userModel = class userModel.

+0

Đó không phải là trường hợp, 'class root.userModel' biên dịch thành' '' root.userModel = (function() { function userModel() {... } trả lại người dùngModel; })(); '' ' –

+0

Đúng, bạn nói đúng. Đã quá nhanh về phản ứng. Nó cũng hoạt động tốt. – timdisney

0

chỉ xác định lớp học của bạn với một '@' trước tên của nó

class @ClassName 
    blablabla: -> blablalblablabla 
Các vấn đề liên quan