2011-06-24 34 views
55

Tôi muốn vượt qua hai chức năng ẩn danh như các đối số cho di chuột của jQuery, như vậy:Làm cách nào để truyền hai hàm ẩn danh làm đối số trong CoffeScript?

$('element').hover(
    function() { 
    // do stuff on mouseover 
    }, 
    function() { 
    // do stuff on mouseout 
    } 
); 

Thật dễ dàng chỉ với một cú - hover -> - nhưng cú pháp thích hợp trong CoffeeScript hai là gì? Tôi đã thử ...hover ->, ...hover(->..., v.v. nhưng không có gì mang lại cho tôi cấu trúc ở trên.

+0

tên chức năng ẩn danh của bạn. làm nó ngay bây giờ. bạn không có tên riêng, vì vậy hãy gọi chúng là 'f' và' g': 'f = (...) -> ...', 'g = ...'. sau đó '($ 'element') .hover f, g'. rất đơn giản, quá biểu cảm. – flow

Trả lời

24

Đặt dấu ngoặc đơn quanh các hàm ẩn danh.

+0

Tôi thề tôi đã làm điều này - những gì tôi đã ám chỉ với hover (-> - nhưng chỉ cần làm nó một lần nữa andit làm việc. Cảm ơn! – glortho

+1

Cần lưu ý mặc dù, có chính xác không có khoảng trắng giữa di chuột và các parantheses $ (@). hover()! = $ (@). hover() Nếu không, đầu ra sẽ được bao bọc trong một tập hợp các dấu ngoặc đơn khác –

+1

Không chỉ nói, hiển thị –

52

Tôi nghĩ rằng vấn đề nằm ở việc sử dụng các nhận xét một dòng //. Các chú thích một dòng được đính kèm trong /* .. */ dường như hoạt động tốt. Đây là một ví dụ tương đương với một cái gì đó khác với một bình luận.

$('element').hover(
    -> console.log("first") 
    -> console.log("second") 
) 

Hoặc với nhận xét sử dụng /* .. */.

$('element').hover(
    -> /* first */ 
    -> /* second */ 
) 

Bạn có thể thử các ví dụ này dưới tab Try CoffeeScript. CoffeeScript thêm một câu lệnh return để trả về biểu thức cuối cùng của hàm. Nếu bạn muốn bare-bones chức năng mà không làm gì cả và không chứa một return ở cuối, hãy thử:

$('element').hover(
() -> 
() -> 
) 
// $('element').hover(function() {}, function() {}); 
+1

Nếu có ai vấp phải điều này: cẩn thận không chèn một khoảng trống vào đây: 'hover (', bạn sẽ kết thúc bằng dấu ngoặc đơn thêm. – punund

21

Một cách khác là sử dụng xuyệc ngược sau khi chức năng gọi, dấu phẩy nên thụt vào một cách chính xác.

$('element').hover \ 
    -> # do stuff on mouseover 
    , 
    -> # do stuff on mouseout 
+0

Cảm ơn, \ rất tốt để đi. Trong khi ở các dòng mã dài , chúng tôi không cần phải tìm kiếm và tìm kiếm) Sử dụng \ với, thực sự đơn giản, tôi cảm thấy jquery khi sử dụng() một lần nữa. –

8

Nếu không có ngoặc hoặc dấu chéo ngược:

f -> 
    0 
, -> 
    1 

Output trên 1.7.1:

f(function() { 
    return 0; 
}, function() { 
    return 1; 
}); 
Các vấn đề liên quan