Nativescript Array of Switch elements | Tricks to read value in tap of Button












0















Scenario:



Using Nativescript 5.0 with Angular




  1. I have data coming from API (customers.component.ts)

  2. Rendering n number of as many IDs I get from API. Works great (customers.component.html)

  3. User taps the Switches to make his choice and finally taps Save Button which calls a function saveData()

  4. In saveData(), I am unable to read which Switches are checked.


I tried below in customers.component.html, it renders perfectly based on the data received from API. No error in this.



<ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
<ng-template let-result="item">
<GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
<Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
<Switch [id]="'switch[' + id + ']'" class="m-15" row="0" col="1" ></Switch>
</GridLayout>
</ng-template>
</ListView>


Is

[id]="'switch[' + id + ']'"
this ok?
Is there any way to read if any of the Switches are checked.



Switches are dynamically created based on API data.



**Edit - adding code below **



<ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
<ng-template let-result="item">
<GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
<Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
<Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch> </GridLayout>
</ng-template>
</ListView>


and important portion of ts file is



import { Component, OnInit } from "@angular/core";
import { RouterExtensions } from "nativescript-angular/router";
import { ActivatedRoute } from "@angular/router";

import { ObservableArray } from "data/observable-array";
import * as Permissions from "nativescript-permissions";
import { Coursemeta } from "../../shared/coursemeta.model";
import { CoursemetaService } from "~/app/shared/coursemeta.service";
var contacts = require( "nativescript-contacts" );

import { finalize } from 'rxjs/operators';

export class ContactManagerComponent implements OnInit {

public constructor(private router: RouterExtensions, private route: ActivatedRoute, private _coursemetaservice: CoursemetaService) { }
public _coursesmeta: ObservableArray<Coursemeta> = new ObservableArray<Coursemeta>();

ngOnInit(): void {
this.callerName=this.route.snapshot.params["callerName"];
this.callerNumber=this.route.snapshot.params["callerNumber"];
this.input="";
this._coursemetaservice.getCoursesmeta()
.pipe(finalize(() => this._isLoading = false))
.subscribe((coursesmeta: Array<Coursemeta>) => {
this._coursesmeta = new ObservableArray(coursesmeta);
this.courseCount=this._coursesmeta.length;
this._isLoading = false;
});
}

public ShowSelectedCourses()
{

for(var i=0; i < this._coursesmeta.length; i++)
{
if(this._coursesmeta.getItem(i).selected == false)
{
alert("false = " + i);
}
}
alert("Saved ....");
}
}


What I expect is, if user slides the switch, then selected property should change its value as its part of observablearray.



I am able to see data as expected, no error in API data communication, rendering is perfect.










share|improve this question





























    0















    Scenario:



    Using Nativescript 5.0 with Angular




    1. I have data coming from API (customers.component.ts)

    2. Rendering n number of as many IDs I get from API. Works great (customers.component.html)

    3. User taps the Switches to make his choice and finally taps Save Button which calls a function saveData()

    4. In saveData(), I am unable to read which Switches are checked.


    I tried below in customers.component.html, it renders perfectly based on the data received from API. No error in this.



    <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
    <ng-template let-result="item">
    <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
    <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
    <Switch [id]="'switch[' + id + ']'" class="m-15" row="0" col="1" ></Switch>
    </GridLayout>
    </ng-template>
    </ListView>


    Is

    [id]="'switch[' + id + ']'"
    this ok?
    Is there any way to read if any of the Switches are checked.



    Switches are dynamically created based on API data.



    **Edit - adding code below **



    <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
    <ng-template let-result="item">
    <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
    <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
    <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch> </GridLayout>
    </ng-template>
    </ListView>


    and important portion of ts file is



    import { Component, OnInit } from "@angular/core";
    import { RouterExtensions } from "nativescript-angular/router";
    import { ActivatedRoute } from "@angular/router";

    import { ObservableArray } from "data/observable-array";
    import * as Permissions from "nativescript-permissions";
    import { Coursemeta } from "../../shared/coursemeta.model";
    import { CoursemetaService } from "~/app/shared/coursemeta.service";
    var contacts = require( "nativescript-contacts" );

    import { finalize } from 'rxjs/operators';

    export class ContactManagerComponent implements OnInit {

    public constructor(private router: RouterExtensions, private route: ActivatedRoute, private _coursemetaservice: CoursemetaService) { }
    public _coursesmeta: ObservableArray<Coursemeta> = new ObservableArray<Coursemeta>();

    ngOnInit(): void {
    this.callerName=this.route.snapshot.params["callerName"];
    this.callerNumber=this.route.snapshot.params["callerNumber"];
    this.input="";
    this._coursemetaservice.getCoursesmeta()
    .pipe(finalize(() => this._isLoading = false))
    .subscribe((coursesmeta: Array<Coursemeta>) => {
    this._coursesmeta = new ObservableArray(coursesmeta);
    this.courseCount=this._coursesmeta.length;
    this._isLoading = false;
    });
    }

    public ShowSelectedCourses()
    {

    for(var i=0; i < this._coursesmeta.length; i++)
    {
    if(this._coursesmeta.getItem(i).selected == false)
    {
    alert("false = " + i);
    }
    }
    alert("Saved ....");
    }
    }


    What I expect is, if user slides the switch, then selected property should change its value as its part of observablearray.



    I am able to see data as expected, no error in API data communication, rendering is perfect.










    share|improve this question



























      0












      0








      0








      Scenario:



      Using Nativescript 5.0 with Angular




      1. I have data coming from API (customers.component.ts)

      2. Rendering n number of as many IDs I get from API. Works great (customers.component.html)

      3. User taps the Switches to make his choice and finally taps Save Button which calls a function saveData()

      4. In saveData(), I am unable to read which Switches are checked.


      I tried below in customers.component.html, it renders perfectly based on the data received from API. No error in this.



      <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
      <ng-template let-result="item">
      <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
      <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
      <Switch [id]="'switch[' + id + ']'" class="m-15" row="0" col="1" ></Switch>
      </GridLayout>
      </ng-template>
      </ListView>


      Is

      [id]="'switch[' + id + ']'"
      this ok?
      Is there any way to read if any of the Switches are checked.



      Switches are dynamically created based on API data.



      **Edit - adding code below **



      <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
      <ng-template let-result="item">
      <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
      <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
      <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch> </GridLayout>
      </ng-template>
      </ListView>


      and important portion of ts file is



      import { Component, OnInit } from "@angular/core";
      import { RouterExtensions } from "nativescript-angular/router";
      import { ActivatedRoute } from "@angular/router";

      import { ObservableArray } from "data/observable-array";
      import * as Permissions from "nativescript-permissions";
      import { Coursemeta } from "../../shared/coursemeta.model";
      import { CoursemetaService } from "~/app/shared/coursemeta.service";
      var contacts = require( "nativescript-contacts" );

      import { finalize } from 'rxjs/operators';

      export class ContactManagerComponent implements OnInit {

      public constructor(private router: RouterExtensions, private route: ActivatedRoute, private _coursemetaservice: CoursemetaService) { }
      public _coursesmeta: ObservableArray<Coursemeta> = new ObservableArray<Coursemeta>();

      ngOnInit(): void {
      this.callerName=this.route.snapshot.params["callerName"];
      this.callerNumber=this.route.snapshot.params["callerNumber"];
      this.input="";
      this._coursemetaservice.getCoursesmeta()
      .pipe(finalize(() => this._isLoading = false))
      .subscribe((coursesmeta: Array<Coursemeta>) => {
      this._coursesmeta = new ObservableArray(coursesmeta);
      this.courseCount=this._coursesmeta.length;
      this._isLoading = false;
      });
      }

      public ShowSelectedCourses()
      {

      for(var i=0; i < this._coursesmeta.length; i++)
      {
      if(this._coursesmeta.getItem(i).selected == false)
      {
      alert("false = " + i);
      }
      }
      alert("Saved ....");
      }
      }


      What I expect is, if user slides the switch, then selected property should change its value as its part of observablearray.



      I am able to see data as expected, no error in API data communication, rendering is perfect.










      share|improve this question
















      Scenario:



      Using Nativescript 5.0 with Angular




      1. I have data coming from API (customers.component.ts)

      2. Rendering n number of as many IDs I get from API. Works great (customers.component.html)

      3. User taps the Switches to make his choice and finally taps Save Button which calls a function saveData()

      4. In saveData(), I am unable to read which Switches are checked.


      I tried below in customers.component.html, it renders perfectly based on the data received from API. No error in this.



      <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
      <ng-template let-result="item">
      <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
      <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
      <Switch [id]="'switch[' + id + ']'" class="m-15" row="0" col="1" ></Switch>
      </GridLayout>
      </ng-template>
      </ListView>


      Is

      [id]="'switch[' + id + ']'"
      this ok?
      Is there any way to read if any of the Switches are checked.



      Switches are dynamically created based on API data.



      **Edit - adding code below **



      <ListView [items]="_coursesmeta" [height]  = "_coursesmeta.length == 0 ? 30 : _coursesmeta.length * 70" class="list-group">
      <ng-template let-result="item">
      <GridLayout rows="auto auto" columns="* *" class="m-5" verticalAlignment="stretch">
      <Label class="h3 m-15" [text]="result.coursename" textWrap="true" row="0" col="0"></Label>
      <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch> </GridLayout>
      </ng-template>
      </ListView>


      and important portion of ts file is



      import { Component, OnInit } from "@angular/core";
      import { RouterExtensions } from "nativescript-angular/router";
      import { ActivatedRoute } from "@angular/router";

      import { ObservableArray } from "data/observable-array";
      import * as Permissions from "nativescript-permissions";
      import { Coursemeta } from "../../shared/coursemeta.model";
      import { CoursemetaService } from "~/app/shared/coursemeta.service";
      var contacts = require( "nativescript-contacts" );

      import { finalize } from 'rxjs/operators';

      export class ContactManagerComponent implements OnInit {

      public constructor(private router: RouterExtensions, private route: ActivatedRoute, private _coursemetaservice: CoursemetaService) { }
      public _coursesmeta: ObservableArray<Coursemeta> = new ObservableArray<Coursemeta>();

      ngOnInit(): void {
      this.callerName=this.route.snapshot.params["callerName"];
      this.callerNumber=this.route.snapshot.params["callerNumber"];
      this.input="";
      this._coursemetaservice.getCoursesmeta()
      .pipe(finalize(() => this._isLoading = false))
      .subscribe((coursesmeta: Array<Coursemeta>) => {
      this._coursesmeta = new ObservableArray(coursesmeta);
      this.courseCount=this._coursesmeta.length;
      this._isLoading = false;
      });
      }

      public ShowSelectedCourses()
      {

      for(var i=0; i < this._coursesmeta.length; i++)
      {
      if(this._coursesmeta.getItem(i).selected == false)
      {
      alert("false = " + i);
      }
      }
      alert("Saved ....");
      }
      }


      What I expect is, if user slides the switch, then selected property should change its value as its part of observablearray.



      I am able to see data as expected, no error in API data communication, rendering is perfect.







      angular typescript nativescript






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 14 '18 at 13:30







      Pratik

















      asked Nov 14 '18 at 9:12









      PratikPratik

      185




      185
























          2 Answers
          2






          active

          oldest

          votes


















          0














          Mutiple ways to achive the desired





          1. Add the onSwitchChecked






          and in your .ts file handle the onSwitchChecked



              import { Switch } from 'ui/switch';
          public onSwitchChecked(args) {
          const sortSwitch = <Switch>args.object;
          if (sortSwitch.id === 'id of your swich') {
          if (sortSwitch.checked) {
          // Change the _coursesmeta or result.selected here.
          }
          }




          1. Use the ng model for your result.checked e.g.



            <Switch [(ngModel)]='isSwitchChecked' (checkedChange)="onSwitchChecked($event)"></Switch>



          and in yout .ts



           public onSwitchChecked() {
          alert(this.isSwitchChecked);
          }


          I have created playground and you can test functionality there.






          share|improve this answer
























          • Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

            – Pratik
            Nov 15 '18 at 7:27











          • Narendra, Thanks a lot!! It works great. !!! I used option 2.

            – Pratik
            Nov 15 '18 at 13:12





















          0














          I wouldn't recommend using dynamic IDs. Also when using ListView, it's not guaranteed that all your Switches / templates are alive, as you scroll up and down same element will be recycled with different data to retain performance.



          So you should play with data here, bind the checked state of Switch to a property in data item. For example



          <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch>


          Now you will just have to loop through the array to find which item is selected.






          share|improve this answer
























          • API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

            – Pratik
            Nov 14 '18 at 9:36











          • Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

            – Manoj
            Nov 14 '18 at 11:14











          • Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

            – Pratik
            Nov 14 '18 at 12:52











          • Would you mind posting the full example code?

            – Manoj
            Nov 14 '18 at 12:54











          • Just added code in the question.

            – Pratik
            Nov 14 '18 at 13:30











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296561%2fnativescript-array-of-switch-elements-tricks-to-read-value-in-tap-of-button%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Mutiple ways to achive the desired





          1. Add the onSwitchChecked






          and in your .ts file handle the onSwitchChecked



              import { Switch } from 'ui/switch';
          public onSwitchChecked(args) {
          const sortSwitch = <Switch>args.object;
          if (sortSwitch.id === 'id of your swich') {
          if (sortSwitch.checked) {
          // Change the _coursesmeta or result.selected here.
          }
          }




          1. Use the ng model for your result.checked e.g.



            <Switch [(ngModel)]='isSwitchChecked' (checkedChange)="onSwitchChecked($event)"></Switch>



          and in yout .ts



           public onSwitchChecked() {
          alert(this.isSwitchChecked);
          }


          I have created playground and you can test functionality there.






          share|improve this answer
























          • Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

            – Pratik
            Nov 15 '18 at 7:27











          • Narendra, Thanks a lot!! It works great. !!! I used option 2.

            – Pratik
            Nov 15 '18 at 13:12


















          0














          Mutiple ways to achive the desired





          1. Add the onSwitchChecked






          and in your .ts file handle the onSwitchChecked



              import { Switch } from 'ui/switch';
          public onSwitchChecked(args) {
          const sortSwitch = <Switch>args.object;
          if (sortSwitch.id === 'id of your swich') {
          if (sortSwitch.checked) {
          // Change the _coursesmeta or result.selected here.
          }
          }




          1. Use the ng model for your result.checked e.g.



            <Switch [(ngModel)]='isSwitchChecked' (checkedChange)="onSwitchChecked($event)"></Switch>



          and in yout .ts



           public onSwitchChecked() {
          alert(this.isSwitchChecked);
          }


          I have created playground and you can test functionality there.






          share|improve this answer
























          • Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

            – Pratik
            Nov 15 '18 at 7:27











          • Narendra, Thanks a lot!! It works great. !!! I used option 2.

            – Pratik
            Nov 15 '18 at 13:12
















          0












          0








          0







          Mutiple ways to achive the desired





          1. Add the onSwitchChecked






          and in your .ts file handle the onSwitchChecked



              import { Switch } from 'ui/switch';
          public onSwitchChecked(args) {
          const sortSwitch = <Switch>args.object;
          if (sortSwitch.id === 'id of your swich') {
          if (sortSwitch.checked) {
          // Change the _coursesmeta or result.selected here.
          }
          }




          1. Use the ng model for your result.checked e.g.



            <Switch [(ngModel)]='isSwitchChecked' (checkedChange)="onSwitchChecked($event)"></Switch>



          and in yout .ts



           public onSwitchChecked() {
          alert(this.isSwitchChecked);
          }


          I have created playground and you can test functionality there.






          share|improve this answer













          Mutiple ways to achive the desired





          1. Add the onSwitchChecked






          and in your .ts file handle the onSwitchChecked



              import { Switch } from 'ui/switch';
          public onSwitchChecked(args) {
          const sortSwitch = <Switch>args.object;
          if (sortSwitch.id === 'id of your swich') {
          if (sortSwitch.checked) {
          // Change the _coursesmeta or result.selected here.
          }
          }




          1. Use the ng model for your result.checked e.g.



            <Switch [(ngModel)]='isSwitchChecked' (checkedChange)="onSwitchChecked($event)"></Switch>



          and in yout .ts



           public onSwitchChecked() {
          alert(this.isSwitchChecked);
          }


          I have created playground and you can test functionality there.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 15 '18 at 6:34









          Narendra MongiyaNarendra Mongiya

          1,530719




          1,530719













          • Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

            – Pratik
            Nov 15 '18 at 7:27











          • Narendra, Thanks a lot!! It works great. !!! I used option 2.

            – Pratik
            Nov 15 '18 at 13:12





















          • Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

            – Pratik
            Nov 15 '18 at 7:27











          • Narendra, Thanks a lot!! It works great. !!! I used option 2.

            – Pratik
            Nov 15 '18 at 13:12



















          Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

          – Pratik
          Nov 15 '18 at 7:27





          Thanks Narendra for the help. My assumption of Observable Array was a two way automatic binding. i.e. Data from API will get bind to Switch state in .html and vice versa user changes of switch slide will automatically reflect into result.selected value of observable array. There is documentation for two way data binding, then why do we need to manually check id of switch that is pressed and then modify the result.selected? Though, meantime will try your solution Narendra.

          – Pratik
          Nov 15 '18 at 7:27













          Narendra, Thanks a lot!! It works great. !!! I used option 2.

          – Pratik
          Nov 15 '18 at 13:12







          Narendra, Thanks a lot!! It works great. !!! I used option 2.

          – Pratik
          Nov 15 '18 at 13:12















          0














          I wouldn't recommend using dynamic IDs. Also when using ListView, it's not guaranteed that all your Switches / templates are alive, as you scroll up and down same element will be recycled with different data to retain performance.



          So you should play with data here, bind the checked state of Switch to a property in data item. For example



          <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch>


          Now you will just have to loop through the array to find which item is selected.






          share|improve this answer
























          • API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

            – Pratik
            Nov 14 '18 at 9:36











          • Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

            – Manoj
            Nov 14 '18 at 11:14











          • Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

            – Pratik
            Nov 14 '18 at 12:52











          • Would you mind posting the full example code?

            – Manoj
            Nov 14 '18 at 12:54











          • Just added code in the question.

            – Pratik
            Nov 14 '18 at 13:30
















          0














          I wouldn't recommend using dynamic IDs. Also when using ListView, it's not guaranteed that all your Switches / templates are alive, as you scroll up and down same element will be recycled with different data to retain performance.



          So you should play with data here, bind the checked state of Switch to a property in data item. For example



          <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch>


          Now you will just have to loop through the array to find which item is selected.






          share|improve this answer
























          • API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

            – Pratik
            Nov 14 '18 at 9:36











          • Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

            – Manoj
            Nov 14 '18 at 11:14











          • Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

            – Pratik
            Nov 14 '18 at 12:52











          • Would you mind posting the full example code?

            – Manoj
            Nov 14 '18 at 12:54











          • Just added code in the question.

            – Pratik
            Nov 14 '18 at 13:30














          0












          0








          0







          I wouldn't recommend using dynamic IDs. Also when using ListView, it's not guaranteed that all your Switches / templates are alive, as you scroll up and down same element will be recycled with different data to retain performance.



          So you should play with data here, bind the checked state of Switch to a property in data item. For example



          <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch>


          Now you will just have to loop through the array to find which item is selected.






          share|improve this answer













          I wouldn't recommend using dynamic IDs. Also when using ListView, it's not guaranteed that all your Switches / templates are alive, as you scroll up and down same element will be recycled with different data to retain performance.



          So you should play with data here, bind the checked state of Switch to a property in data item. For example



          <Switch [checked]="result.selected" class="m-15" row="0" col="1" ></Switch>


          Now you will just have to loop through the array to find which item is selected.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 14 '18 at 9:31









          ManojManoj

          5,7132922




          5,7132922













          • API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

            – Pratik
            Nov 14 '18 at 9:36











          • Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

            – Manoj
            Nov 14 '18 at 11:14











          • Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

            – Pratik
            Nov 14 '18 at 12:52











          • Would you mind posting the full example code?

            – Manoj
            Nov 14 '18 at 12:54











          • Just added code in the question.

            – Pratik
            Nov 14 '18 at 13:30



















          • API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

            – Pratik
            Nov 14 '18 at 9:36











          • Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

            – Manoj
            Nov 14 '18 at 11:14











          • Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

            – Pratik
            Nov 14 '18 at 12:52











          • Would you mind posting the full example code?

            – Manoj
            Nov 14 '18 at 12:54











          • Just added code in the question.

            – Pratik
            Nov 14 '18 at 13:30

















          API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

          – Pratik
          Nov 14 '18 at 9:36





          API provides dynamic data e.g. course id & course name Will your code create Switch dynamically? I have used dynamic IDs several thousands of times in web development, but not sure how it goes here in NS?

          – Pratik
          Nov 14 '18 at 9:36













          Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

          – Manoj
          Nov 14 '18 at 11:14





          Listview takes an array of data items as input and renders items for each based on the item template you pass in. My code was just psuedo to showcase how you bind the checked property directly instead of I'd. Read more about ListView in the official docs.

          – Manoj
          Nov 14 '18 at 11:14













          Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

          – Pratik
          Nov 14 '18 at 12:52





          Manoj, thanks for the correct input. I took a while to understand your suggestion. Now I am able to do it but console.log does not reflect user updated state of Switch. Even when all Switches are slide to off state, console says true. As long as I feel, I am not doing anything wrong in ObservableArray. Any further clue will help me call it a day !!!

          – Pratik
          Nov 14 '18 at 12:52













          Would you mind posting the full example code?

          – Manoj
          Nov 14 '18 at 12:54





          Would you mind posting the full example code?

          – Manoj
          Nov 14 '18 at 12:54













          Just added code in the question.

          – Pratik
          Nov 14 '18 at 13:30





          Just added code in the question.

          – Pratik
          Nov 14 '18 at 13:30


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296561%2fnativescript-array-of-switch-elements-tricks-to-read-value-in-tap-of-button%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Bressuire

          Vorschmack

          Quarantine