2010-07-27 33 views
5

Tôi mới sử dụng Rails và có một vấn đề khá đơn giản với việc gọi các hàm javascript từ bên trong một khung nhìn. Trong Rails 2, tôi sẽ làm ...Gọi hàm javascript từ dạng xem trong Rails 3

= javascript_tag "name(arguments)" 

trong đó chức năng javascript "name" được đặt trong tệp application.js của tôi. Tuy nhiên, điều này dường như không hoạt động trong Rails 3? Hay tôi đang thiếu một cái gì đó? Tôi đã tìm kiếm Google một thời gian mà không cần tìm câu trả lời.

UPDATE:

OK, vì vậy tôi nhìn vào nguồn gốc của hai cách khác nhau (bằng cách sử dụng javascript_tag và Haml javascript lọc) như đề xuất. Và điều này là rất lạ vì nguồn html dường như giống hệt nhau? Ngoài sự khác biệt về dấu nháy kép và đơn trong việc khai báo kiểu tập lệnh.

FIRST: sử dụng javascript_tag mà không hoạt động

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

Nguồn ...

<div id='number_number_interval_727'>loading</div> 
<script type="text/javascript"> 
//<![CDATA[ 
number_interval(6952596670.36814, 2.33002440293917, 0, 'number_number_interval_727' 
//]]> 
</script> 

THỨ HAI: sử dụng Haml lọc javascript và nó hoạt động

:javascript 
    number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}') 

Nguồn ...

<div id='number_number_interval_727'>loading</div> 
<script type='text/javascript'> 
//<![CDATA[ 
number_interval(6952596917.02179, 2.33002440293917, 0, 'number_number_interval_727') 
//]]> 
</script> 

Vâng, tôi đoán tôi sẽ chỉ gắn bó với bộ lọc Haml!

Trả lời

2

Bạn có một lỗi cú pháp:

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

thiếu đóng ngoặc cho number_interval chức năng.Tôi nghĩ rằng nó phải là:

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}')" 
+0

Wow ... không thể tin rằng tôi đã bỏ lỡ điều đó :) – kbjerring

0

Check-out đúng cú pháp trên link text

và Kiểm tra xem bạn đã bao gồm giá trị mặc định javascript trong file.As của bạn làm việc này cho tôi trong Rails 3 cũng

+0

Cú pháp là chính xác và mặc định javascript được bao gồm. Cảnh báo javascript_tag ('Tất cả là tốt') "cũng hoạt động, nhưng nếu tôi ví dụ đặt" alert ('all is good') "vào một hàm của riêng nó, hãy đặt nó trong application.js, và sau đó thử gọi nó với javascript_tag nó không. Nhưng có lẽ đây không phải là cách để làm điều đó. – kbjerring

+0

Vậy thì bạn có lỗi trong hàm hoặc cú pháp của mình. Đăng mã chức năng của bạn, chính xác như bạn có. –

2

Một người bạn của tôi đã chỉ cho tôi đến một thực tế rằng có một trình trợ giúp javascript trong haml. Rõ ràng, tôi có thể gọi hàm javascript bằng cách sử dụng ...

:javascript 
    name_of_function(arguments) 

Công trình này, nhưng tất nhiên chỉ với haml.

0

Câu hỏi ngớ ngẩn nhưng ... là app.js có trong bố cục của bạn không?

Một tùy chọn để thử là viết mã lệnh gọi hàm js vào chế độ xem của bạn bằng javascript "thực" - chỉ để xem nó có hoạt động không. ví dụ:

<script type="text/javascript"> 
    name(arguments) 
</script> 

Sau đó, bạn có thể chắc chắn nó không phải là chính js (hoặc thiếu) do lỗi.

+0

Có, bao gồm application.js. Tôi đoán: bộ lọc javascript trong haml làm những gì bạn đề xuất, ... và nó hoạt động. – kbjerring

+0

Ok ... do đó, tùy chọn tiếp theo là để xem nguồn trên những gì được đưa vào html khi bạn làm một trong đó là phá vỡ ... và so sánh với những gì int ông nguồn khi bạn sử dụng phiên bản haml. nếu bạn có thể sao chép mã nguồn có liên quan vào câu hỏi của bạn (ở trên), chúng tôi có thể phân biệt nó và xem điều gì đang diễn ra. –

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