簡體   English   中英

Ruby on Rails,附加jQuery Data

[英]Ruby on Rails, appending jQuery Data

有沒有辦法將數據附加到Rails中的元素,如jQuery。 例如,如果你有

var element = $('element');
element.data('i', 'Hello world');

在jquery中,您可以在以后檢索該數據:

console.log(element.data('i));

會導致

你好,世界

這樣,它將信息存儲在一個不起眼的地方,從而導致無法直接從jQuery外部訪問的變量。

相反,現在我只知道使用Rails追加HTML數據屬性:

<%= content_tag(:div, "Something", data: { i: 'Hello world' }) %>

這相當於在jQuery中設置.attr()

設置HTML數據屬性會導致:

  • 檢查時元素的可見性
  • 不能是對象

基本上,我在這里要問的是,我可以使用Rails附加jQuery數據集,因此它將是:

  • 只能從.data()訪問
  • 無法從.attr()或其他任何地方訪問
  • 檢查時未在元件上公開顯示

有沒有辦法將數據附加到Rails中的元素,如jQuery

例:

# in your view *.html.erb
<%= content_tag(:div, "Content", data: { whatever: 42, whenever: "5pm" }) %>

結果是:

<div data-whatever="42" data-whenever="5pm">Content</div>

選項1

看看gon ,這使得在JavaScript中訪問Rails變量非常簡單。 它不會將它們作為data屬性附加,但同時您將數據一次性發送到客戶端,因此它將在頁面源中可用。

(這個Railscast插曲也會引導您完成設置,以及它是如何工作的)

選項2

如果你真的需要隱藏/混淆數據(我假設這是來自刮刀,這就是我將要關注的內容),而你不想做這個客戶端,那么你需要設置Rails應用程序中的新路由,並對該端點執行AJAX調用以返回數據。 這不是萬無一失的,但是這里有一些選擇可以讓刮刀更加困難。

最好的方法是使用Javascript類並將它們作為“變量”或方法調用存儲在對象上。 在Javascript:The Good Parts一書中,關於類的部分有一個很好的例子。

雖然如果有人真的想要獲取變量,但仍然可以訪問這些變量,但更加混淆。 另一種方法是通過Javascript利用本地會話,同樣仍然可以由客戶端檢索,但有點混淆。 基本上,如果你在客戶端進行,安全性是一個難以破解的難題。

另外,FWIW您的問題與Rails無關,這是所有客戶端Javascript,雖然它可能在基於Rails的Web應用程序中仍然是Javascript。

你可以做的一個選擇是對Rails后端的AJAX調用,通過特定的Rails路由(即API)檢索數據,但我不確定能獲得你想要實現的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM