DevExtreme dxTreeList+KnockoutJS:如何将接口数据转为数字数组赋值给selectedRowKeys
解决DevExtreme dxTreeList中selectedRowKeys的JSON数据格式问题
我懂你的困扰——接口返回的是包裹在数组里的逗号分隔字符串(比如["2,8,25"]),但dxTreeList的selectedRowKeys需要的是纯数字数组[2,8,25]才能正常工作。这里给你一套简单直接的处理方案:
具体代码修改
你需要在拿到接口数据后,先拆分那个逗号分隔的字符串,再把每个元素转成数字,最后再传给self.GetData。修改后的代码如下:
$.getJSON('../DataAPI/api/Data/GetData', function (data) { // 先做基础的格式校验,避免空数据或非数组格式导致报错 if (data && Array.isArray(data) && data.length > 0) { // 取出数组里的逗号分隔字符串 const idString = data[0]; // 拆分字符串为单个id的字符串数组,再逐个转成整数 const numericIds = idString.split(',').map(function(id) { // 指定十进制转换,避免意外的八进制解析 return parseInt(id, 10); }); // 现在传入的就是纯数字数组,对应你要的GetData([2,8,25])格式 self.GetData(numericIds); } });
额外优化提示
- 如果
self.GetData是Knockout的可观察数组,直接赋值self.GetData(numericIds)就能自动触发UI更新;如果是普通数组,直接替换即可。 - 可以加一层容错处理,过滤掉无效的数字格式,避免异常数据影响功能:
const numericIds = idString.split(',').map(id => { const num = parseInt(id, 10); // 只保留有效整数,过滤掉转换失败的内容 return Number.isInteger(num) ? num : null; }).filter(id => id !== null);
内容的提问来源于stack exchange,提问作者Tamer
相关产品推荐
相关产品推荐

