2014-09-26 19 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

相關問題