Rails 视图中的 if 语句基于刺激控制器返回的值?
我的视图中有一个范围滑块,并且根据我的刺激控制器返回的滑块的输出值,我正在尝试执行 if &在我看来, else 语句我想根据值显示不同的选项。
例如,如果 range-slider__value=<5 那么我想为 Plan.find_by(id: 1) 显示 plan.title、plan.description 和 plan.monthly_price,如果它小于 5,我想为 Plan.find_by 显示相同的内容(编号:2)。然后我希望能够签出所选的计划。
我的观点:
<div class="range-slider" data-controller="range-slider">
<input type="range"
name="customRange"
class="range-slider__range"
data-target="range-slider.range"
data-action="input->range-slider#updateValue"
value="6"
min="0"
max="10"
step="0.5">
<output class="range-slider__value" data-target="range-slider.value">
</output>
</div>
我的刺激控制器:
export default class extends Controller {
static get targets() {
return ['range', 'value', 'rangeFrom', 'rangeTo', 'valueFrom', 'valueTo']
}
connect() {
if (this.hasValueTarget) { this.valueTarget.innerHTML = this.rangeTarget.value }
if (this.hasValueToTarget) { this.valueToTarget.innerHTML = this.rangeToTarget.value }
if (this.hasValueFromTarget) { this.valueFromTarget.innerHTML = this.rangeFromTarget.value }
}
updateValue(evt) {
this.valueTarget.innerHTML = evt.currentTarget.value;
}
updateFromValue() {
let fromValue = this.rangeFromTarget.value
let toValue = this.rangeToTarget.value
if (fromValue >= toValue) {
this.rangeToTarget.value = fromValue
this.valueToTarget.innerHTML = fromValue
}
this.valueFromTarget.innerHTML = fromValue
}
updateToValue() {
let fromValue = this.rangeFromTarget.value
let toValue = this.rangeToTarget.value
if (toValue <= fromValue) {
this.rangeFromTarget.value = toValue
this.valueFromTarget.innerHTML = toValue
}
this.valueToTarget.innerHTML = toValue
}
}
I have a range slider in my view, and based of the output value my stimulus controller returns of the slider I'm trying to do an if & else statement in my view where I wanna display different options based of the value.
For example if range-slider__value=<5 then I wanna display plan.title, plan.description and plan.monthly_price for Plan.find_by(id: 1), and if it's less then 5 I wanna show the same for Plan.find_by(id: 2). And then I want to be able to checkout that selected Plan.
My view:
<div class="range-slider" data-controller="range-slider">
<input type="range"
name="customRange"
class="range-slider__range"
data-target="range-slider.range"
data-action="input->range-slider#updateValue"
value="6"
min="0"
max="10"
step="0.5">
<output class="range-slider__value" data-target="range-slider.value">
</output>
</div>
My stimulus controller:
export default class extends Controller {
static get targets() {
return ['range', 'value', 'rangeFrom', 'rangeTo', 'valueFrom', 'valueTo']
}
connect() {
if (this.hasValueTarget) { this.valueTarget.innerHTML = this.rangeTarget.value }
if (this.hasValueToTarget) { this.valueToTarget.innerHTML = this.rangeToTarget.value }
if (this.hasValueFromTarget) { this.valueFromTarget.innerHTML = this.rangeFromTarget.value }
}
updateValue(evt) {
this.valueTarget.innerHTML = evt.currentTarget.value;
}
updateFromValue() {
let fromValue = this.rangeFromTarget.value
let toValue = this.rangeToTarget.value
if (fromValue >= toValue) {
this.rangeToTarget.value = fromValue
this.valueToTarget.innerHTML = fromValue
}
this.valueFromTarget.innerHTML = fromValue
}
updateToValue() {
let fromValue = this.rangeFromTarget.value
let toValue = this.rangeToTarget.value
if (toValue <= fromValue) {
this.rangeFromTarget.value = toValue
this.valueFromTarget.innerHTML = toValue
}
this.valueToTarget.innerHTML = toValue
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不确定这是否相关,但我遇到了这段代码,发现 if 语句实际上并没有按预期工作。
我最终所做的
是使用当前事件来获取此函数中的最新值。我还必须解析 if 语句的值,因为默认情况下,这些值是字符串。
我还通过
static Targets = ['rangeFrom', 'rangeTo', 'valueFrom', 'valueTo'] 使用最新的 StimulusJs 目标设置
Not sure if this is relevant, but I came across this code and saw that the if statements does not actually work as wanted.
What I ended up doing
I'm using the current event to get the latest value within this function. I also had to parse the values for the if statement, as by default, these values are strings.
I'm also using the latest StimulusJs target setting via
static targets = ['rangeFrom', 'rangeTo', 'valueFrom', 'valueTo']