2012-03-22 67 views
3

我是sencha touch和javascipt的新手,我試圖在我的sencha觸摸模型中初始化其他值的功能。在Java中,我這樣做:如何在sencha觸摸模型中創建構造函數?

private int a,b,c; 

public className(int a, int b){ 
    this.a = a; 
    this.b = b; 
    this.c = b - a; 
} 

在煎茶我試圖這樣做,但我的「遺漏的類型錯誤:無法調用的未定義‘hasOwnProperty’」。這裏是我的模型:

Ext.define('MyApp.className', { 
extend: 'Ext.data.Model', 

config: { 

    fields: [ 
     { name: 'a', type: 'int' }, 
     { name: 'b', type: 'int' }, 
     { name: 'c', type: 'int'}, 
    ] 

}, 

constructor: function(config) { 

    var a = this.get('a'); 
    var b = this.get('b'); 
    this.set('c', b - a); 

}, 

}); 

在這裏,我如何創建我的實例:

var instance = Ext.create('MyApp.className', { 
    a : '5', 
    b : '4' 
}); 

我試圖從構造器取代我的方法的名字給init,現在它的工作原理。但我不知道這是否是正確的方法,因爲init函數不是構造函數......有什麼區別?如何編寫構造函數?

非常感謝!

回答

2

雖然@Saket Patel的回答是錯誤的,在大多數的情況下是錯誤的。你應該使用可用的convert財產上的任何領域,這被傳遞場的兩個值和記錄的一個實例:

Ext.define('MyModel', { 
    extend: 'Ext.data.Model', 

    config: { 
     { 
      name: 'a', type: 'int' 
     }, 
     { 
      name: 'b', type: 'int' 
     }, 
     { 
      name: 'c', type: 'int', 
      convert: function(value, record) { 
       return record.get('a') + record.get('b'); 
      } 
     } 
    } 
}); 

var record = Ext.create('MyModel', { 
    a: 1, 
    b: 2 
}); 

console.log(record.get('c')); // 3 

點擊此處瞭解詳情:http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Field-cfg-convert

+0

謝謝您同時rdougan和金山寺帕特爾爲了幫助,我選擇了rdougan的解決方案,它似乎是做我想做的事情的最佳方式:-) – 2012-03-23 09:46:31

4

你其實可以延長構造但對於構造函數的參數是不同的,也ANS你沒有調用父類的構造函數,這是非常重要的,試着用下面的代碼

Ext.define('MyApp.className', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      { name: 'a', type: 'int' }, 
      { name: 'b', type: 'int' }, 
      { name: 'c', type: 'int'}, 
     ] 
    }, 

    constructor: function(data, id, raw, convertedData) { // number of arguments is different 
     // call parent first then you can do further processing 
     this.callParent(); 

     var a = this.get('a'); 
     var b = this.get('b'); 
     this.set('c', b - a); 
    }, 
}); 
相關問題