在NativeScript Core应用程序中,我有一个动态呈现的用户列表,并且每个用户有两个Switch元素;一个参与,一个分配。
首先,在加载或重新加载列表后,如何立即将“ checkedChange”事件绑定到该列表中的所有Switch元素(而不是该页面上的任何其他Switch元素)?
第二,仅当参与开关被选中,否则禁用和未选中时,才应启用分配开关。怎样才能很好地做到这一点?
第三,该事件触发了一个假定可以保存更改的功能。我应该如何检索有关类型(涉及或分配)和用户ID的信息?
要澄清:
我知道给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中有什么方法可以做类似的事情吗?
答案 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 中,您可以访问可以控制的数据。