Javascript对象数据未返回正确的值

时间:2015-08-31 13:16:27

标签: javascript object extjs

我目前正在与Sencha合作开展一个Javascript项目,我正面临一个我甚至无法理解的问题。

问题很简单。这是我的代码:

console.log("store : ");
console.log(store);
console.log("store length :");
console.log(store.data.length);

以下是它的回报:

store :
_data: Ext.apply.create.Class
_model: ()
_modelDefaults: Ext.Object.classify.objectClass
_params: Ext.Object.classify.objectClass
_proxy: Ext.apply.create.Class
_remoteFilter: false
_remoteGroup: false
_remoteSort: false
_storeId: "Indicator_Value"
_syncRemovedRecords: false
config: Ext.Object.classify.objectClass
data: Ext.apply.create.Class
     _autoFilter: true
    _autoSort: true
    _filterRoot: "data"
    _sortRoot: "data"
    all: Array[2]
    config: Ext.Object.classify.objectClass
    dirtyIndices: false
    getKey: (record)
    indices: Object
    initConfig: ()
    initialConfig: Object
    items: Array[2]
    keys: Array[2]
    length: 2
map: Object
__proto__: Ext.util.Collection#constructor
dateFirst: Mon Aug 31 2015 14:47:36 GMT+0200 (Paris, Madrid (heure d’été))
dateLast: Mon Aug 31 2015 15:02:48 GMT+0200 (Paris, Madrid (heure d’été))
emptyNext: false
emptyPrevious: false
eventDispatcher: Ext.apply.create.Class
getEventDispatcher: ()
getId: ()
getObservableId: ()
getUniqueId: ()
graphType: 1
id: "myapp-store-indicator_value-1"
indicatorId: 262
initConfig: ()
initialConfig: Object
initialized: true
managedListeners: Object
observableId: "#myapp-store-indicator_value-1"
period: "H"
removed: Array[0]
titleIndicatorValue: "Duration in FTC"
usedSelectors: Array[1]
__proto__: Object


store length :
14

我只是不明白。 store.data.length应该返回2,但它会一直返回14.也许有些东西我只是不了解商店如何工作? 无论如何,我真的很喜欢一些帮助,因为我已经坚持了大约2个小时,我看不到它的结束。

谢谢!

4 个答案:

答案 0 :(得分:2)

  

我只是不明白。 store.data.length应该返回2,但它保持不变   返回14。

这很容易。在哪里看到" 2"您会看到商店的当前计数,因为您正在查看商店对象。在哪里看到" 14"在将其写入控制台时,您会看到计数。显然,自那以后,无论出于何种原因,伯爵都发生了变化!

这很容易重现:

var store = Ext.create('Ext.data.Store', {
    data: ['foo', 'bar', 'aa', 'foo', 'bar', 'aa', 'foo', 'bar', 'aa', 'foo', 'bar', 'aa', 'bar', 'aa']
});
console.log(store);
console.log(store.data.length);
store.removeAt(0, 12);

示例:https://fiddle.sencha.com/#fiddle/s86

答案 1 :(得分:0)

length是一个JavaScript属性,所以你不应该调用你的变量长度。

如果它是你正在使用的这个框架的类,那么试着找出你想要的长度,并试试这个:

console.log(store.data.all.length);

答案 2 :(得分:0)

Ext.data.Store的{​​{3}}不是数组。这是一个data property。 MixedCollection没有length属性。

获取商店中的数字或记录的正确方法是使用

store.getCount()

答案 3 :(得分:0)

数据存储中有data属性,因此您可以使用以下代码阅读:

store.data

store.data的类型为Ext.util.MixedCollection,因此您应该将其计算在:

store.data.getCount()

正如您使用console.log(store);所获得的,您可能会发现此代码也有效:

store.data.items.length