gpt4 book ai didi

extjs - Store.findBy() 表现得很疯狂?

转载 作者:行者123 更新时间:2023-12-04 05:28:06 25 4
gpt4 key购买 nike

我已经调试了好几天了。 Store.findBy(function (record, id)不行为。或者也许是我行为不端。已将 JSON 放入代码中,以便于测试。 FindBy() 匹配 12345 而没有 12345,它返回索引为 0 和 foo。我在做什么?

Ext.application({
name: 'MyApp',
launch: function() {

var theJson = {
"users": [{
"user": {
"id": 0 ,
"name": "foo" ,
"age": 22 ,
"skills": [{
"type": "bowcrafting" ,
"skillLevel": 50 ,
"levels": [10, 25, 50, 75, 90, 95, 99, 100]
}]
}} , {
"user": {
"id": 1 ,
"name": "bar" ,
"age": 71 ,
"skills": [{
"type": "fencing" ,
"skillLevel": 32 ,
"levels": [10, 25, 50, 90, 95, 99, 100]
} , {
"type": "swordsmanship" ,
"skillLevel": 73 ,
"levels": [10, 25, 50, 75, 80, 85, 90, 95, 99, 100]
}]
}} , {
"user": {
"id": 2 ,
"name": "foobar" ,
"age": 132 ,
"skills": [{
"type": "tactics" ,
"skillLevel": 90 ,
"levels": [10, 25, 50, 90, 95, 99, 100]
} , {
"type": "carpentery" ,
"skillLevel": 86 ,
"levels": [10, 25, 50, 75, 90, 95, 99, 100]
} , {
"type": "hiding" ,
"skillLevel": 100 ,
"levels": [10, 25, 50, 65, 75, 80, 85, 90, 95, 99, 100]
}]
}
}]
};

var jstore = Ext.create ('Ext.data.Store', {
fields: ['id', 'name', 'age', 'skills'] ,
data : theJson,
proxy: {
type: 'memory' ,
reader: {
type: 'json' ,
root: 'users' ,
record: 'user' ,
idProperty: 'id'
}
} ,

autoLoad: true
});

Ext.create ('Ext.button.Button', {
text: 'Push me' ,
renderTo: Ext.getBody () ,
handler: function (btn) {
var index = jstore.findBy (function (user, id) {
// Here's the hint
if (user.data.skills.skillLevel === 12345) return id;
else return -1;
});

console.log ('index = ', index);

if (index != -1) {
// It will print 'foo' because it's the user
// that has the skillLevel equal to 50
console.log (jstore.getAt(index).get ('name'));
};

if (index === -1) {
// It will print 'foo' because it's the user
// that has the skillLevel equal to 50
console.log ('Failed');
}
}
});
}
});

最佳答案

你有吗read the documentation ?您的 findBy方法不符合契约(Contract)。特别是,它返回 -1如果不匹配,并且由于这是 JavaScript,则 -1true ,所以找到第一条记录。

        handler: function (btn) {
var index = jstore.findBy (function (user, id) {
// Here's the hint
console.log(id);
console.log(user);

if (user.data.skills.skillLevel === 12345) return true;
else return false;
});

(这解决了你的误报问题,我并不是说你的支票会找到任何东西)。

关于extjs - Store.findBy() 表现得很疯狂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12946890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com