Nativescript “我如何跟踪”;“已检查更改”;列表中多个开关元素的事件?
在NativeScript核心应用程序中,我有一个动态呈现的用户列表,对于每个用户,有两个开关元素;一个用于参与,一个用于分配 首先,在加载或重新加载列表后,如何将“checkedChange”事件一次绑定到该列表中的所有开关元素(而不是该页面上的任何其他开关元素) 其次,只有在选中参与开关或禁用和取消选中elsehow时,才应启用分配开关。如何以良好的方式实现这一点 第三,该事件触发一个函数,该函数被假定为保存更改。我应该如何检索有关类型(包括或分配)和用户id的信息 澄清: 我知道给switch元素一个ID并静态绑定它的方法,如:Nativescript “我如何跟踪”;“已检查更改”;列表中多个开关元素的事件?,nativescript,Nativescript,在NativeScript核心应用程序中,我有一个动态呈现的用户列表,对于每个用户,有两个开关元素;一个用于参与,一个用于分配 首先,在加载或重新加载列表后,如何将“checkedChange”事件一次绑定到该列表中的所有开关元素(而不是该页面上的任何其他开关元素) 其次,只有在选中参与开关或禁用和取消选中elsehow时,才应启用分配开关。如何以良好的方式实现这一点 第三,该事件触发一个函数,该函数被假定为保存更改。我应该如何检索有关类型(包括或分配)和用户id的信息 澄清: 我知道给swi
const mySwitch = page.getViewById("mySwitch");
mySwitch.on("checkedChange", (args) => {
// Do something
});
及
但在本例中,我使用ViewModel和ObservableArray从API加载用户列表。每个记录包含两个开关元素,给它们唯一的ID并绑定每个元素似乎是一个糟糕的解决方案
如果它是一个web应用程序,我会为Switch元素添加额外的属性,比如:
<Switch data-type="user-involvement" data-uid="10" .../>
数据类型为“用户参与”的所有元素的集合绑定更改
在{N}内核中有没有类似的方法?- 如果您使用的是{N}核心风味,那么您应该能够添加
在加载checkedChange
开关的
事件时侦听器
- 在
的Switch
事件中,您可以通过更新与之绑定的可观察属性来更新其他checkedChange
的Switch
属性checked
- 我为您创建了一个示例游乐场。在初始加载时,在youe XML中,可以有2个开关,并且可以根据第一个开关的状态控制第二个开关
<Switch checked="{{involved}}" loaded="switchLoaded" />
<Switch checked="{{assigned}}" isEnabled="{{involved}}" />
还可以在加载的方法上绑定侦听器
function switchLoaded(args) {
console.log(args.object.bindingContext);
args.object.on("checkedChange", (args) => {
console.log("checkedChange ", args.object.checked);
});
}
在args.object.bindingContext中,您可以访问您可以控制的数据。静态开关元素的绑定不是挑战,它是绑定checkedChange到动态元素列表(其中id绑定对我来说似乎不是一个好的解决方案)…请参阅我在原始问题中添加的额外说明。正如我在回答中已经提到的,使用Switch本身的加载事件而不是页面,这样您可以执行类似于
args.object.on('checkedChange',listener')的操作代码>。谢谢,我还没有试过,但这正是我要找的!很好,我还为游乐场示例添加了一个链接,您可以使用。你可以对答案进行投票,这样有类似问题的人就可以从中受益。顺便问一下,你知道当开关被改变时,如何改变可以观察到的视图模型吗?也就是说,如果涉及的开关变为false,则为该用户分配的值也应变为false。。。我尝试过类似这样的方法homeViewModel.forEach(函数(e,I){if(args.object.bindingContext.name==e.name){homeViewModel.set(“homeViewModel[“+I+”]['assigned']],true);})代码>…但没有更改。。。
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);
});
}