Extjs store store 剪切bigint值的最后一位

Extjs store store cuts the last digits of a bigint values

我使用的是 Extjs 7.4。当我将数据加载到 extjs 存储中时,我遇到了 bigint 值的最后一位数字被截断的问题。 模型字段类型是 int 还是 number 并不重要。 Bigint 值只有在类型为字符串时才能正确显示。我不能在数据模型的 idProperty 中将该字段用作字符串。有人知道吗。

可能是javascript的限制,不是ExtJs。事实上,如果您尝试使用 bigint 属性 创建一个新对象,您会得到一些截断的数字:

var record = {
    numericValue: 9223372036854776807,
    stringValue: "9223372036854775807"
};
console.log(record);

它打印:

{
    numericValue: 9223372036854776000,
    stringValue: "9223372036854775807"
}

---编辑---

一个解决方案可能是传递商店模型中定义的 BigInt 字段的 convert 配置。请注意,您的 属性 最初应由商店作为字符串读取。这样做,属性 将正确存储 BigInt 值:

Ext.define("MyStore",{
    extend: "Ext.data.Store",

    fields: [
        {
            name: "bigIntProp",
            convert: function (value) {
                return BigInt(value);
            }
        }
    ]
});

var store = new MyStore();

store.add({ bigIntProp: '9223372036854775807' });

// This correctly print the big int value now
console.log(store.getAt(0).get("bigIntProp"));