Как я могу отслеживать события "checkedChange" для нескольких элементов Switch в списке? - PullRequest
1 голос
/ 07 марта 2019

В приложении NativeScript Core у меня есть динамически отображаемый список пользователей, и у каждого пользователя есть два элемента Switch; один для участия и один для назначения.

Во-первых, как я могу связать событие "checkedChange" со всеми элементами Switch в этом списке сразу после того, как список был загружен или перезагружен (а не с любыми другими элементами Switch на этой странице)?

Во-вторых, переключатель назначения должен быть включен только в том случае, если переключатель участия включен или отключен и не отмечен в другом случае. Как это может быть достигнуто хорошим способом?

В-третьих, событие вызывает функцию, которая должна сохранить изменения. Как мне получить информацию о типе (задействовать или назначить) и идентификатор пользователя?

Пример снимка экрана

Для уточнения:

Я знаю о способе присвоения переключателю элемента идентификатора и его статической привязки, например:

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

и

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

Но в этом случае я загружаю список пользователей из API, используя ViewModel и ObservableArray. Каждая запись содержит два элемента Switch, и присвоение им уникальных идентификаторов и связывание каждого из них кажется плохим решением.

Если бы это было веб-приложение, я бы добавил дополнительные атрибуты к элементу Switch, например:

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

и все вместе связывают изменения со всеми элементами, в которых тип данных "участие пользователя".

Есть ли способ сделать нечто подобное в {N} Core?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Я создал образец игровой площадки для вас здесь . При начальной загрузке в 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 у вас есть доступ к данным, которыми вы можете управлять.

0 голосов
/ 07 марта 2019
  • Если вы используете {N} основной аромат, тогда вы сможете добавить checkedChange слушатель при loaded событии Switch.

  • В событии checkedChange Switch вы можете обновить свойство checked другого Switch, обновив атрибут Observable, с которым он связан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...