Search code examples
checkboxsapui5sap-web-ideweb-ide

input box not updating when checkbox is selected sapiu5


I created a table in Web IDE that has a checkbox and input box that by default shows "100%" when checkbox is selected. It was working before I added data from a json but now that I made the column list item a template taking in data from the json on some of the columns, the input box does not fill in when selecting checkbox.

What shows up now: lastest result

What I want to show up: enter image description here

If I use something like message box, it does the correct output when selecting checkbox.

sap.m.MessageBox.alert("100%")
sap.m.MessageBox.alert("0%")

I binded the event to the checkbox under select. This is the code for the checkbox.

    percentCheck: function(oEvent) {
        //inputText is the input Text box  
        var inputText = this.getView().byId("inputPercent");
        var isSelected = oEvent.getParameter("selected");

        if (isSelected) {
            inputText.setValue("100%");
        } else {
            inputText.setValue("");
        }
    }

Solution

  • I think that it is better to update the model and not change the value of the control directly. here is an example http://jsbin.com/yuhipop/edit?html,js,output

    <!DOCTYPE HTML>
    <html>
    
      <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta charset="UTF-8">
        <title>MVC</title>
        <script id="sap-ui-bootstrap" type="text/javascript"
                src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
                data-sap-ui-theme="sap_bluecrystal"
                data-sap-ui-libs="sap.m,sap.ui.table"
                data-sap-ui-xx-bindingSyntax="complex">
        </script>
    
        <script id="oView" type="sapui5/xmlview">
        <mvc:View height="100%" controllerName="myView.Template"
          xmlns="sap.m" 
          xmlns:core="sap.ui.core"
          xmlns:mvc="sap.ui.core.mvc"
          xmlns:table="sap.ui.table">
    
        <table:Table id="Table1" rows="{/}"
          selectionMode="None">
          <table:columns>
            <table:Column>
            <Label text="Employee name"/>
            <table:template>
              <Text text="{name}" ></Text>
            </table:template>
            </table:Column>
            <table:Column>
              <Label text="Company"/>
              <table:template>
                <Text text="{company}"></Text>
              </table:template>
            </table:Column>
            <table:Column>
            <Label text="Checkbox"/>
            <table:template>
              <CheckBox selected="{selected}" 
                select="checkBoxChanged"/>
            </table:template>
            </table:Column>
            <table:Column>
            <Label text="Bonus"/>
            <table:template>
              <Input value="{bonus}" 
                change="inputChanged"/>
            </table:template>
            </table:Column>
          </table:columns>
    
        </table:Table>
      </mvc:View>
        </script>
    
      </head>
    
      <body class="sapUiBody" role="application">
        <div id="content"></div>
      </body>
    
    </html>
    

    view

    sap.ui.define([
      'jquery.sap.global',
      'sap/ui/core/mvc/Controller',
      'sap/ui/model/json/JSONModel'
    ], function(jQuery, Controller, JSONModel) {
      "use strict";
    
      var oController = Controller.extend("myView.Template", {
        onInit: function(oEvent) {
          this.getView().setModel(new JSONModel([
            { name : "John", "company": "apple inc", selected: true, bonus: "100%" },
            { name : "Mary", "company": "abc inc", selected: true, bonus: "100%" },
          ]));
        },
        inputChanged: function(oEvent) {
          var cxt = oEvent.getSource().getBindingContext();
          var obj = cxt.getObject();
          obj.selected = (obj.bonus === '100%');
        },
        checkBoxChanged: function(oEvent) {
          var cxt = oEvent.getSource().getBindingContext();
          var obj = cxt.getObject();
          if (obj.selected) {
            obj.bonus = '100%';
          }
        },
      });
    
      return oController;
    });
    
    var oView = sap.ui.xmlview({
      viewContent: jQuery('#oView').html()
    });
    
    oView.placeAt('content');