3

我正在尝试研究如何在 ruby​​ volt 框架中添加一个按钮——这确实是一个初学者的问题。

我已经尝试修改 todos 示例(第 1部分和第 2 部分),但没有让它工作。

我不太确定我的 html 错误还是控制器代码。任何指针将不胜感激。

浇水.html

  <button e-click="add_message">Start Watering</button>

  <table class="message_table">
    {{ _messages.each do |m| }}
    <tr>
      <td> {{ m.msg }} </td>
    <tr>
    {{ end }}
  </table>

这确实在页面上放置了一个按钮,但是当我按下它时,我希望在控制器中触发以下代码,但是没有任何反应。

主控制器.rb

module Main
  class MainController < Volt::ModelController
    model :store

 ...

    def add_message
      p "### Message triggered ###"
      _messages << {msg: "test-msg-01"}
    end

end

我已将 p 语句作为检查 - 按下按钮时绝对不会触发它。

4

2 回答 2

2

在@ryanstout 的帮助下得到了这个工作 - 非常感谢。

我发布这个答案是因为有两个简单的错误,如果您尝试开始使用 ruby​​ volt 框架,这可能是潜在的问题:

控制器代码很好,但是 html 中有两个错误:

  1. HTML有一个小错误,第二个<tr>应该是</tr>关闭行

要点:目前没有由 volt (0.9.3) 或我用于格式错误的 HTML 的 Firefox 版本生成的错误,但它可能会阻止您的代码工作 - 在这种情况下,按钮不起作用

  1. 对迭代器变量字段的引用需要一个前导下划线(所以 m._msg 不是 m.msg)

要点:父对象及其字段需要下划线

下面是 HTML 的外观:

<button e-click="add_message">Start Watering</button>

  <table class="message_table">
    {{ _messages.each do |m| }}
    <tr>
      <td> {{ m._msg }} </td>
    <tr>
    {{ end }}
  </table>

希望这对其他人有帮助。

于 2015-07-07T22:07:48.953 回答
0

这似乎是正确的。但请记住 - 控制器在客户端运行。因此,您应该在浏览器控制台中看到 p 语句的输出。

只是为了确定-您的视图位于 app/main/views/main/ 中吗?

于 2015-07-06T22:00:12.297 回答