2009-12-03 13 views
1

我一直在試圖設計一個小部件爲我的Rails應用程序,不幸發現自己缺乏在Javascript技能...文章統計小工具在軌

我能夠基於此短導向,以創建窗口小部件博客:http://www.eduvoyage.com/2008/8/3/widget-with-rails

但我需要的是與他們描述的有點不同。

如果您擁有針對特定文章投票的類似digg或tweetmeme的應用程序,您如何創建顯示投票的小部件?

比方說,文章模型有一個名稱,一個鏈接和一個votes_counter。

這是我的嘗試:

在文章控制器:

def index 
@article = Article.find_by_link("#{request.url}") 
    respond_to do |format| 
    format.js 
     format.html 
    end 
end 

在index.js.erb的:

var txt = '' 

txt += "<div id='article_widget'>"; 
txt += "<h2>Article vote count:</h2>"; 
txt += "<%= escape_javascript(@article.votes) %>"; 
txt += "</div>"; 

document.write(txt); 

我得到的問題是,@文章原來是零。想通了什麼事,我添加這段代碼到我的JavaScript文件:

txt += "<%= escape_javascript(request.url) %>"; 

屏幕上的結果是:http://localhost:3000/articles.js。很顯然,當它只是返回javascript文件的路徑時,我無法使用find_by_link方法。我想在find_by_link方法中使用瀏覽器中的當前網址。

或者是否有更好的方法來做到這一點?

有沒有辦法讓我的rails應用程序確切地知道哪些文章被引用?

回答

3

許多小部件實際運行的兩段代碼:事情是這樣的:

部件代碼在客戶現場:

<script src="http://yourdomain.com/javascripts/widget.js" type="text/javascript"></script> 

widget.js

(function(){ 
    var loc = window.location, 
     title = document.title, 
     href = 'http://yourdomain.com/widgets/count.js?url=' + encodeURIComponent(loc); 

    href = href + '&title=' + encodeURIComponent(title); 

    var script = document.createElement('script'); 
    script.src = href; 
    script.type = "text/javascript"; 

    // Call your real script: 
    document.documentElement.firstChild.appendChild(script); 
})(); 

然後,您可以訪問它的Rails通過使用params[:url]params[:title]

這不是一個完整的解決方案,因爲你的第二個腳本沒有上下文的位置。大部分(digg,tweetmeme)使用document.write,但我個人厭惡使用它。

如果我建立這個整個事情,我可能會用一個id的空div是你有用戶副本中的小部件代碼的一部分,或者我可能會使用document.write第一js文件寫出來控股div第二個腳本可以通過getElementById填充。

最後一句警告:請確保在匹配前清除URL。你不想要http://domain.comhttp://domain.com/提供兩個不同的匹配。

+0

這似乎是一個很好的建議,雖然當我試圖看到我得到什麼,當我輸入txt + =「<%= escape_javascript(params [:url])%>」;該網址重複自己無盡的。不知道該怎麼辦。我對編程非常陌生,只知道ruby,rails和SQL。我認爲一個小部件會很簡單,我不必學習JavaScript,我應該去買一本書,學習它只是爲了製作一個小部件? –

+0

嗯。不知道你重複自己的意思。它不斷重新加載相同的頁面?或者它打印了一個不結束的URL並凍結了服務器? –

+0

它打印了不結束的行。不知道爲什麼。 –