2012-10-13 14 views
9

Come estendere dal modello personalizzato in extjs.Estendi dalla classe del modello personalizzata in ExtJS 4

Esiste un metodo che può associare direttamente i campi dei campi Utente e BusinessUser quando farò riferimento ai campi dalla classe BusinessUser nell'esempio seguente.

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name', type: 'string'}, 
     {name: 'age', type: 'int'}, 
     {name: 'phone', type: 'string'}, 
     {name: 'alive', type: 'boolean', defaultValue: true} 
    ], 
}); 

Ext.define('BusinessUser', { 
    extend: 'User', 
    fields: [ 
     {name: 'businessType', type: 'string'}, 
     {name: 'company', type: 'string'} 
    ], 
}); 

risposta

15

Non è necessario unire i campi manualmente perché è fatto automaticamente. Controllare le uscite nel codice muggito in base alla domanda:

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name', type: 'string'}, 
     {name: 'age', type: 'int'}, 
     {name: 'phone', type: 'string'}, 
     {name: 'alive', type: 'boolean', defaultValue: true} 
    ], 
}); 

Ext.define('BusinessUser', { 
    extend: 'User', 
    fields: [ 
     {name: 'businessType', type: 'string'}, 
     {name: 'company', type: 'string'} 
    ], 
}); 

// instantiating a User object 
var u = Ext.create('BusinessUser', { 
    name: 'John Doe', 
    age: 30, 
    phone: '555-5555' 
}); 

// instantiating a BusinessUser object 
var bu = Ext.create('BusinessUser', { 
    name: 'Jane Doe', 
    age: 40, 
    phone: '555-5556', 
    businessType: 'analyst', 
    company: 'ACME' 
}); 

console.log(Ext.getClassName(bu)); // "BusinessUser" 
console.log(Ext.getClassName(u)); // "User" 
console.log(u instanceof User); // true 
console.log(bu instanceof User); // true 
console.log(u instanceof BusinessUser); // false 
console.log(bu instanceof BusinessUser); // true 
console.log(u instanceof Ext.data.Model); // true 
console.log(bu instanceof Ext.data.Model); // true 
console.log(u instanceof Ext.data.Store); // false, just to check if it's not returning true for anything 
console.log(bu instanceof Ext.data.Store); // false 
console.log("name" in u.data); // true 
console.log("name" in bu.data); // true 
console.log("company" in u.data); // false 
console.log("company" in bu.data); // true 
+0

Sembra un errore, ma ... 'console.log (Ext.getClassName (bu)); // "BusinessUser" ' ' console.log (Ext.getClassName (u)); // "Utente" ' stamperà' BusinessUser' entrambe le volte e i test per 'instanceof' forniranno l'output di conseguenza – bam

6

Anche se dovrebbe funzionare automaticamente, utilizzare il seguente se si hanno problemi per qualche motivo.

utilizzare il costruttore per unire i campi:

Ext.define('BusinessUser', { 
    extend : 'User', 
    constructor : function(){ 
     this.callParent(arguments); 
     this.fields.push([ 
     {name: 'businessType', type: 'string'}, 
     {name: 'company', type: 'string'} 
    ]); 
    } 
}); 
+0

Anche se questo dovrebbe funzionare la risposta di seguito è quella corretta. Si prega di fare riferimento ad esso in quanto fa questo per voi automaticamente. – codemonkeyww

Problemi correlati