如何跟踪列表中多个Switch元素的“ checkedChange”事件?

时间:2019-03-07 15:41:26

标签: nativescript

在NativeScript Core应用程序中,我有一个动态呈现的用户列表,并且每个用户有两个Switch元素;一个参与,一个分配。

首先,在加载或重新加载列表后,如何立即将“ checkedChange”事件绑定到该列表中的所有Switch元素(而不是该页面上的任何其他Switch元素)?

第二,仅当参与开关被选中,否则禁用和未选中时,才应启用分配开关。怎样才能很好地做到这一点?

第三,该事件触发了一个假定可以保存更改的功能。我应该如何检索有关类型(涉及或分配)和用户ID的信息?

Example screenshot

要澄清:

我知道给switch元素分配ID并静态绑定它的方法,例如:

 const mySwitch = page.getViewById("mySwitch");
 mySwitch.on("checkedChange", (args) => {
   // Do something
 });

<Switch id="mySwitch" .../>

但是在这种情况下,我正在使用ViewModel和ObservableArray从API加载用户列表。每个记录包含两个Switch元素,为它们提供唯一的ID并绑定每个ID似乎是一个糟糕的解决方案。

如果它是一个Web应用程序,我会向Switch元素添加额外的属性,例如:

<Switch data-type="user-involvement" data-uid="10" .../>

并将更改集体绑定到所有数据类型为“涉及用户”的元素。

在{N} Core中有什么方法可以做类似的事情吗?

2 个答案:

答案 0 :(得分:0)

  • 如果您使用的是{N}核心风味,则应该可以添加 checkedChange的{​​{1}}事件发生时loaded个侦听器。

  • Switch的{​​{1}}事件中,您可以通过更新其绑定的Observable属性来更新其他checkedChange的{​​{1}}属性。

答案 1 :(得分:0)

我为您here创建了一个示例游乐场。初始加载时,在XML中,您可以有2个开关,并且可以根据第一个开关的状态控制第二个开关。

  <Switch checked="{{involved}}" loaded="switchLoaded" />
  <Switch checked="{{assigned}}" isEnabled="{{involved}}" />

在您的js文件中。

countries: [
      { name: "User 1", involved: true, assigned: false },
      { name: "User 2", involved: true, assigned: false },
      { name: "User 3", involved: false, assigned: false },
      { name: "User 4", involved: true, assigned: false },
      { name: "User 5", involved: true, assigned: false },
    ],

您还可以在加载的方法上绑定侦听器。

function switchLoaded(args) {
  console.log(args.object.bindingContext);
  args.object.on("checkedChange", (args) => {
    console.log("checkedChange ", args.object.checked);
  });
}

args.object.bindingContext 中,您可以访问可以控制的数据。