2016-07-25 41 views
1

Ich versuche, ein Modell mit einer hasMany Association zu erstellen, aber wenn ich versuche, auf den Speicher zuzugreifen, ist es leer.ExtJS 6: laden verschachtelte Daten durch Erstellen neuer Instanz von Modell

Dies ist meine Modelle:

Basemodel:

Ext.define('Test.model.schema.BaseModel', { 
    extend: 'Ext.data.Model', 

    schema: { 
     namespace: 'Test.model' 
    } 
}); 

UserModel:

Ext.define('Test.model.user.UserModel', { 
    extend: 'Ext.data.Model', 

    fields: [ 
     { 
      name: 'displayName', 
      type: 'string' 
     } 
    ], 

    hasMany: [ 
     { 
      name: 'roles', 
      model: 'user.RoleModel', // also try with Test.model.user.RoleModel 
      associationKey: 'roles' 
     } 
    ] 
}); 

Rolemodel:

Ext.define('Test.model.user.RoleModel', { 
    extend: 'Ext.data.Model', 

    fields: [ 
     { 
      name: 'label', 
      type: 'string' 
     } 
    ] 
}); 

Das ist meine Anwendung ist:

Ext.application({ 
    name: 'Test', 

    models : [ 
     'Test.model.schema.BaseModel', 
     'Test.model.user.RoleModel', 
     'Test.model.user.UserModel' 
    ], 

    appFolder : contextPath + '/' + staticsPath + '/js/app', 

    controllers : ['router.TestRouterController'], 

    defaultToken : 'auth' 
}); 

In meinem Controller versuche ich mein Benutzermodell wie diese zu erstellen:

var user = Ext.create('Test.model.user.UserModel', { 
    displayName : 'Mick P.', 
    roles : [ 
     { 
      label: 'test' 
     } 
    ] 
}); 

Samt mit JSon.

Wenn ich user.roles tun(). GetAt (0) Ich habe null und user.roles(). Data.items leer.

Siehst du, was ich falsch mache?

EDIT 1: Eine Geige meines Problems: https://fiddle.sencha.com/#fiddle/1e54

EDIT 2: Es funktioniert, wenn ich meine Daten mit einem Speicher laden. Aber warum nicht durch direktes Laden eines Modells.

+0

Warum haben Sie ein Basismodell und ein Schema erstellt, aber Sie verwenden es nicht? Wenn Sie das Basismodell, das Schema und die Zuordnungen verwenden, müssen Ihre anderen Modelle das Basismodell erweitern. – bakamike

+0

Exact Ich brauche keine Basis, aber keine Basis zu erweitern. Ich habe meine Geige verändert. Jetzt muss der Benutzer nicht auf den absoluten Pfad für Fiddle.model.Role verweisen.Ich muss nur Role sagen, weil ich im Basismodell Namespaces definiert habe. Versuchen Sie, das Basismodell zu löschen, und Sie werden den Unterschied sehen. –

Antwort

2

Sencha Unterstützung senden Sie mir eine Antwort. Vielleicht brauchen einige von euch eine Antwort.

Zuerst müssen Sie diese Dokumentation Seite lesen: http://docs.sencha.com/extjs/6.0.2-classic/Ext.data.reader.Reader.html

Wenn Sie Daten direkt in das Modell Konstruktor übergeben, wird er nicht über den konfigurierten Leser weitergegeben und nur grundlegende Felder ausgewertet werden.

Daten müssen einen Reader durchlaufen.

Wenn Sie nicht über einen Shop erstellen möchten:

1 - Sie Proxy in Modelle

2 deklarieren müssen - Modell mit verschachtelten Daten zu erstellen, müssen Sie so etwas tun:

UserModel.getProxy().getReader().read(raw); 

Wenn Sie ein Geige Beispiel benötigen, sagen Sie es mir.

- Mickael