2012-10-13 50 views
9

如何從extjs中的自定義模型擴展。從ExtJS中自定義模型類擴展4

有沒有什麼方法可以直接關聯User和BusinessUser字段的字段,當我在下面的示例中引用BusinessUser類的字段時。

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'} 
    ], 
}); 

回答

15

你並不需要,因爲它是自動完成的手動加入的字段。根據你的問題檢查下列代碼中的輸出:

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

看起來像一個錯字,但... 'console.log(Ext.getClassName(bu)); //「BusinessUser」' 'console.log(Ext.getClassName(u)); //「用戶」 將兩次打印「BusinessUser」 ,並且'instanceof'的測試將相應地提供輸出 – bam

6

雖然它應該自動工作,但如果您由於某種原因出現故障,請使用以下方法。

使用構造加盟字段:

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

雖然這應該工作,但下面的答案是正確的。請參考它,因爲它會自動爲你做這個。 – codemonkeyww