/ / ExtJs Data Store values ​​empty but Store Raw value populated - json, extjs

Les valeurs du magasin de données ExtJs sont vides mais la valeur Store Raw est remplie - json, extjs

J'ai donc du mal à essayer de déterminer pourquoi monles valeurs de données du magasin ne sont pas remplies pour mon composant de sélection d’éléments, mais les valeurs des données brutes sont remplies, il semble que mon modèle et les magasins soient correctement configurés. J'essaye juste d'utiliser cette première partie particulière des données json, c'est pourquoi j'ai la propriété rootProperty définie sur "data [0] .options". J'essaie juste de remplir ce sélecteur d'articles avec cette collection "Area" de données json. Les composants sont ci-dessous, toute aide serait appréciée.

ItemSelector

xtype: "itemselector",
cls: "itemSelectorPlainPanel",
margin: "10 10 10 10",
labelAlign: "top",
height: 200,
flex: 1,
autoScroll: true,
id: "ertcSelector",
buttons: ["add", "remove"],
reference: "ertcSelector",
store: Ext.create("cers.store.ManagerFilterStore"),
displayField: "label",
allowBlank: true,
msgTarget: "side",
fromTitle: "Available ERTC Home Area",
toTitle: "Selected ERTC Home Area",
listeners: {
render: function() {
console.log(this);
/*console.log("Value is " + this.fromField.store.data.items.length);*/
}
}

le magasin

Ext.define("cers.store.ManagerFilterStore", {
extend: "cers.util.Store",
requires:[
"cers.model.ManagerFilterItems",
"cers.util.MsgHelper",
"Ext.data.proxy.Rest"
],
model: "cers.model.ManagerFilterItems",
storeId: "managerFilterId",
autoLoad: true,
proxy: {
type: "rest",
method: "GET",
url: "/rest/mgrqueue/init",
extraParams: {
authUserId: "eksioog"
},
reader: {
type: "json",
rootProperty: "data[0].options",
totalProperty: "total",
successProperty: "success",
messageProperty: "message"
}
},
listeners: {
datachanged: function() {
/*console.log("rawData below!!!!");
console.log(this.getProxy());
console.log("Model Info");
console.log(this.getProxy().getModel().getFields());
console.log("getData");
console.log(this.getData());
console.log("Fields");
console.log(this.getProxy().getModel().getFields());
console.log("Model");
console.log(this.getProxy().getModel());
console.log("Store");
console.log(this);
console.log("Data");
console.log(this.getData());*/
console.log("Reader");
console.log(this.getProxy().getReader());
}
},

constructor: function(){
this.callParent(arguments);
/*this.filter("model", "Area");*/
}
});

Modèle

Ext.define("cers.model.ManagerFilterItems", {
extend: "cers.util.Model",

constructor: function (args) {
this.callParent(args); // Calls the parent constructor of parent class being extended
},
fields: [
{ name: "label", type: "string"},
{ name: "value", type: "string"},
{ name: "active", type: "boolean"},
{ name: "selected", type: "boolean"}
],
idProperty: "label",

getLabel : function() {
return this.get("label");
},

setLabel : function(value) {
this.set("label", value);
},

getValue : function() {
return this.get("value");
},

setValue : function(value) {
this.set("value", value);
},

getActive : function() {
return this.get("active");
},

setActive : function(value) {
this.set("active", value);
},

getSelected : function() {
return this.get("selected");
},

setSelected : function(value) {
this.set("selected", value);
}
});

Json Data

{
"data" : [ {
"model" : "Area",
"functionality" : "ManagerQueueFilter",
"options" : [ {
"label" : "HeadQuarters",
"value" : "12",
"active" : true,
"selected" : false
}, {
"label" : "Northeast",
"value" : "2",
"active" : true,
"selected" : false
}, {
"label" : "Testing Area",
"value" : "41",
"active" : true,
"selected" : false
} ], }
{
"model" : "User",
"functionality" : "ManagerQueueFilter",
"options" : [
{
"label" : "Green, Ted",
"value" : "c0gret6_vzwm",
"active" : false,
"selected" : false
}, {
"label" : "Eksioglu, Oguz",
"value" : "eksioog",
"active" : true,
"selected" : true
} ]
} ],
"total" : 2,
"success" : true,
"message" : "Success"

Réponses:

0 pour la réponse № 1

Essayer d'ajouter mode propriété à votre itemselector:

...
mode: "local",
...

En outre, vous n'avez pas défini valueField à votre "domaine".


0 pour la réponse № 2

Eh bien, je viens de finir de définir manuellement les données égales à la valeur des données brutes dans un écouteur qui attendait l'événement modifié comme suit:

listeners: {
datachanged: function() {
for(i = 0; i < this.getData().items.length; i++) {
this.getData().items[i].data = this.getData().items[i].raw;
console.log("New Data " + i);
console.log(this.getData().items[i].data);
}
}
}

C'est un bootleg mais ça a marché, je ne sais toujours pas pourquoi ces instances de Model n'ont pas été remplies.