我一直在调试这几天。 Store.findBy(function (record, id)
不行为。或者可能是我行为不端。将JSON放入代码中以便测试。 FindBy()匹配12345并且没有12345,它返回索引0和foo。我在做什么?Store.findBy()表现疯狂?
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');
}
}
});
}
});
通过这种方式,即使它存在于商店中,您也永远不会获得该值,因为'user .data.skills'是一个数组。 – MMT
我知道,但是OP在问他为什么会得到误报,而不是他为什么找不到匹配。 – themel
然后他会用true/false做什么,find的目的是检查是否它存在或不存在 – MMT