2014-09-26 55 views
0

所以我有一个简单的游戏,在index.erb,代码如下:我将如何引入Jquery项目来更新Sinatra中的index.erb?

<div class="battleInfo"> 
    <h2> Your HP: <%= @my_knight.hp %> </h2> 
    <h2> Dragon HP: <%= @my_dragon.hp %> </h2> 

    <h1> <%= @results %> </h1> 
</div> 

我想使用jQuery公共文件夹app.js,更新HP信息,以便我们能看到角色的整个运行过程以及它们如何死亡。

的JS代码:

function postHP() { 
     $(".battleInfo").append(my_knight.hp); 
     $(".battleInfo").append(my_dragon.hp); 
}; 

我得到my_knight没有定义的错误。如果我使用@my_knight,则表示@是非法字符。

这是我Ruby的第一周,我不知道如何得到这个工作,并不能在网上找到答案。

我想基本的问题是如何从js获取信息到sinatra。 我有CSS工作得很好。

任何帮助表示赞赏,感谢

回答

1

首先,你需要明白发生了什么地方/时。首先,客户正在提出请求。 Rails接收请求,实例化控制器,它设置实例变量。然后rails获取你的erb文件,找到所有<%.. %>块并在那里替换/执行命令。这导致纯HTML正在被发回给客户。

当客户收到html时,它会加载此html中引用的所有CSS和JavaScript文件。这个JavaScript绝对没有访问控制器的实例变量 - 它不知道他们曾经存在过,它不知道它是轨道应用程序,不知道什么控制器是等等。

拉的任何排序最常见的方法返回视图的数据是发送一个AJAX--这意味着浏览器会对你的服务器进行一次额外的调用,这将返回一个JSON对象,通过javascript可以理解,并且可以用来更新加载的HTML。

有很多步骤来实现这一点。首先,您需要在控制器中创建一个新动作,如update_hp或某物。然后你必须用你的javascript触发AJAX调用,并定义一个处理程序(函数)来处理来自服务器的成功响应。这个处理程序很可能会更新请求的字段。

你可以看到一些关于如何构建AJAX请求here的例子,以及关于构建json响应here的一些细节。这个话题太广泛了,无法在此描述。给它一个回去,当你卡住时回来。

+0

非常感谢您的答复。我会研究这些事情,我们将在2周左右的时间内完成AJAX和JSON。我迫不及待地想出了这个想法。 – nyhunter77 2014-09-26 20:33:30

相关问题