Javascript rails中的Article stats小部件
我一直在尝试为我的rails应用程序设计一个小部件,不幸的是我发现自己缺乏Javascript技能 我能够根据这个博客的简短指南创建一个小部件: 但我需要的和他们描述的有点不同 如果你有一个类似digg或tweetmeme的应用程序,对某篇文章有投票权,你如何创建一个小部件来显示投票权 假设一个文章模型有一个名称、一个链接和一个计数器 这就是我所尝试的: 在文章中:Javascript rails中的Article stats小部件,javascript,ruby-on-rails,widget,Javascript,Ruby On Rails,Widget,我一直在尝试为我的rails应用程序设计一个小部件,不幸的是我发现自己缺乏Javascript技能 我能够根据这个博客的简短指南创建一个小部件: 但我需要的和他们描述的有点不同 如果你有一个类似digg或tweetmeme的应用程序,对某篇文章有投票权,你如何创建一个小部件来显示投票权 假设一个文章模型有一个名称、一个链接和一个计数器 这就是我所尝试的: 在文章中: def index @article = Article.find_by_link("#{request.url}")
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);
var txt=''
txt+=”;
txt+=“文章投票计数:”;
txt+=”;
txt+=”;
document.write(txt);
我遇到的问题是,@文章结果是零。为了找出问题所在,我在javascript文件中添加了以下代码:
txt += "<%= escape_javascript(request.url) %>";
txt+=”;
屏幕上的结果是:。显然,当find_by_link方法只返回javascript文件的路径时,我将无法使用它。在find_by_link方法中,我想要的是浏览器中的当前url
还是有更好的方法
有没有办法让我的rails应用程序确切地知道引用了哪篇文章?许多小部件实际上运行两段代码:类似这样的代码: 客户端站点上的小部件代码:
<script src="http://yourdomain.com/javascripts/widget.js" type="text/javascript"></script>
然后可以在Rails中使用params[:url]
和params[:title]
这不是一个完整的解决方案,因为您的第二个脚本没有放置小部件的上下文。大多数大型网站(digg、tweetmeme)都使用文档。编写,但我个人不喜欢使用它
如果我正在构建这整件事,我可能会有一个id为用户副本的小部件代码的一部分的空div,或者我可能会使用文档。在第一个js
文件中写入,写出一个保持div
,第二个脚本可以通过getElementById
填充
最后一句警告:在匹配之前,请确保清除URL。您不需要http://domain.com
和http://domain.com/
提供两个不同的匹配项。这似乎是一个很好的建议,尽管当我尝试查看输入txt+=”时得到的结果时;url无限重复。不知道该怎么办。我对编程非常陌生,只真正了解ruby、rails和SQL。我认为一个小部件应该足够简单,这样我就不必学习javascript了,我应该去买一本书,学习它只是为了制作一个小部件吗?嗯,不知道你所说的重复本身是什么意思。它一直在重新加载同一页?或者它打印了一行没有结尾的URL并冻结了服务器?它打印了一行没有结尾的URL。不知道为什么。我知道这是半年前的事了,但我真的要感谢你们的解决方案。不过,我不得不开始学习Javascript来理解它。最后,我把一切都做好了。这个小部件还远没有完成,但至少我已经开始了。非常感谢你的帮助@Kenji,我很高兴你开始了。。。希望你能成功!
(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 );
})();