How to re init stepper on VDOM change

:one: The template is rendering using V-DOM. A toggle is manipulating the state. works.

:two: Code

<template>
<!-- <div class="page-content">
TOGGLE HERE. WORKS. CHANGES STATE AND DOM UPDATES :) -->
{{#unless isSigned}}
          <li class="item-content">
            <div class="item-inner">
              <div class="item-title">Quantity(bags)</div>
              <div class="item-after">
                <div class="stepper">
                  <div class="stepper-button-minus"></div>
                  <div class="stepper-input-wrap">
                    <input type="text" name="NoOfBags" readonly value="0" />
                  </div>
                  <div class="stepper-button-plus"></div>
                </div>
              </div>
            </div>
          </li>          
          {{else}}
          {{/unless}}
<!-- </div>-->
import {Component} from 'framework7'
export default class extends Component{
    data(){
        return{
        isSigned : false
    }
    }
    mounted(){
    var signedToggle = app.toggle.create({
        el: "#toggle-signed",
        on: {
          change: function (e) {
            self.$update();
            self.$tick(function () {
              self.$setState({ isSigned: !self.isSigned });
            });
          },
        },
      });

        var bagStepper = app.stepper.create({
            el: ".stepper",
            max: 10000,
            min: 0,
            autorepeat: true,
          });
    }
}

:three: Stepper works at first, and later do not after state change, how to re init it ?

Move you init code inside the change handler, directly below the $setState

1 Like
  • Thanks to response :smile_cat:

  • your method required little change

    • inside on:change of toggle
      a. self.$setState({_update_state_})
      b. self.$tick(function(){init stepper here})

That’s right, forgot about that :slight_smile:

You can as well add it as a second argument to $setState:

1 Like