2012-03-22 32 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); 
    }, 
}); 
相关问题