我如何在 Volt 中执行 jQuery toggleClass?
How do I do a jQuery toggleClass in Volt?
我正在玩 Volt,目前正在尝试为我的 Volt 应用程序中的侧边栏做一个简单的 toggleClass(没有成功)。这是一个代码示例。
app/main/views/main.html
<:Title>
{{ view main_path, "title", {controller_group: 'main'} }}
<:Body>
<div id="wrapper">
<div id="sidebar-wrapper">
<ul class="sidebar-nav">
<li><a href="#">blah</a></li>
<li><a href="#">blah</a></li>
<li><a href="#">blah</a></li>
...
</ul>
</div>
<div id="page-content-wrapper">
<div class="container-fluid">
<div class="btn btn-default sidebar-toggler">Toggle Sidebar</div>
<:volt:notices />
{{ view main_path, 'body', {controller_group: 'main'} }}
</div>
</div>
</div>
app/main/assets/js/sidebar.js
$(document).ready(function() {
$(".sidebar-toggler").click(function(e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
});
});
当点击 div.sidebar-toggler
时,应该将 toggled
class 添加到 div#wrapper
... 它没有,也许还有另一种方法可以用 Volt 做到这一点.
上面的代码无效。
好的 Volt 方法 是什么?
在伏特中,您通常会在控制器上将切换状态设置为“reactive accessors”,然后使用绑定更新 class 状态。由于控制器是绑定的上下文,我们可以在 if 绑定中检查 reactive_accessor 的状态。
在控制器中:
module Main
class MainController < Volt::ModelController
reactive_accessor :toggled
def toggle_sidebar
self.toggled = !toggled
end
....
在视图中:
...
<div class="btn btn-default sidebar-toggler {{ if toggled }}toggled{{ end }}" e-click="toggle_sidebar">Toggle Sidebar</div>
...
当我们调用 self.toggled = 方法时,它会更改状态并使用该数据反应性地更新任何绑定。 e-click 调用控制器上的 toggle_sidebar 方法。做这种简单事情的常见 Volt 方法是将 if
直接放入视图中。我们还可以将它放入一个方法中,该方法 returns 一个字符串并绑定到该字符串。
def toggled_class
toggled ? 'toggled' : ''
end
....
<div class="btn btn-default sidebar-toggler {{ toggled_class }}" e-click="toggle_sidebar">Toggle Sidebar</div>
希望对您有所帮助,如果您需要,我可以进一步说明。
我正在玩 Volt,目前正在尝试为我的 Volt 应用程序中的侧边栏做一个简单的 toggleClass(没有成功)。这是一个代码示例。
app/main/views/main.html
<:Title>
{{ view main_path, "title", {controller_group: 'main'} }}
<:Body>
<div id="wrapper">
<div id="sidebar-wrapper">
<ul class="sidebar-nav">
<li><a href="#">blah</a></li>
<li><a href="#">blah</a></li>
<li><a href="#">blah</a></li>
...
</ul>
</div>
<div id="page-content-wrapper">
<div class="container-fluid">
<div class="btn btn-default sidebar-toggler">Toggle Sidebar</div>
<:volt:notices />
{{ view main_path, 'body', {controller_group: 'main'} }}
</div>
</div>
</div>
app/main/assets/js/sidebar.js
$(document).ready(function() {
$(".sidebar-toggler").click(function(e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
});
});
当点击 div.sidebar-toggler
时,应该将 toggled
class 添加到 div#wrapper
... 它没有,也许还有另一种方法可以用 Volt 做到这一点.
上面的代码无效。 好的 Volt 方法 是什么?
在伏特中,您通常会在控制器上将切换状态设置为“reactive accessors”,然后使用绑定更新 class 状态。由于控制器是绑定的上下文,我们可以在 if 绑定中检查 reactive_accessor 的状态。
在控制器中:
module Main
class MainController < Volt::ModelController
reactive_accessor :toggled
def toggle_sidebar
self.toggled = !toggled
end
....
在视图中:
...
<div class="btn btn-default sidebar-toggler {{ if toggled }}toggled{{ end }}" e-click="toggle_sidebar">Toggle Sidebar</div>
...
当我们调用 self.toggled = 方法时,它会更改状态并使用该数据反应性地更新任何绑定。 e-click 调用控制器上的 toggle_sidebar 方法。做这种简单事情的常见 Volt 方法是将 if
直接放入视图中。我们还可以将它放入一个方法中,该方法 returns 一个字符串并绑定到该字符串。
def toggled_class
toggled ? 'toggled' : ''
end
....
<div class="btn btn-default sidebar-toggler {{ toggled_class }}" e-click="toggle_sidebar">Toggle Sidebar</div>
希望对您有所帮助,如果您需要,我可以进一步说明。