Rails 视图中的 if 语句基于刺激控制器返回的值?

发布于 2025-01-16 07:21:01 字数 1875 浏览 2 评论 0原文

我的视图中有一个范围滑块,并且根据我的刺激控制器返回的滑块的输出值,我正在尝试执行 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他夏了夏天 2025-01-23 07:21:02

不确定这是否相关,但我遇到了这段代码,发现 if 语句实际上并没有按预期工作。

我最终所做的

updateFromValue(event) {
    let new_value = parseInt(event.currentTarget.value)
    let to_value = parseInt(this.rangeToTarget.value)

是使用当前事件来获取此函数中的最新值。我还必须解析 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

updateFromValue(event) {
    let new_value = parseInt(event.currentTarget.value)
    let to_value = parseInt(this.rangeToTarget.value)

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']

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文