2013-08-23 34 views
0

如何在Ext.data.Model中实现获取者和设置者?ExtJS模型获取者和设置者

我的例子:

Ext.define('Person', { 
    extend: 'Ext.data.Model', 
    fields: [{ 
     name: 'Name', 
     type: 'string' 
    }, { 
     name: 'Surname', 
     type: 'string' 
    }, { 
     name: 'BirthDate', 
     type: 'date', 
     dateFormat: 'd-m-Y' 
    }, { 
     name: 'Salary', 
     type: 'int' 
    }, { 
     name: 'Married', 
     type: 'boolean' 
    }], 
    convert: function (v, record) { 
     console.log(v) 
     return record.get('Surname') + v; 
    } 
}); 

var person = Ext.create('Person', { 
    Name: 'Eugene', 
    Surname: 'Popov', 
    BirthDate: '22-05-1984', 
    Salary: 300, 
    Married: false 
}); 

console.log(person.get('Salary')); //300 

我想例如person.get( '工资')返回300美元。 感谢您的帮助。

+0

我的“答案”错过了最后一行OP *所做的调用* call:person.get('Salary') - 我错过了最后一行,但由于没有执行滚动条( –

回答

5

正如乔治所说,它确实被烤成模型给你,但是为了方便起见,你可以添加你自己的getter和setter,如果你愿意的话。我个人确实会为我的模型添加一些getter和setters,就像它有助于清理整个应用程序中的代码。在我看来,model.set('some_long_field_name', data);是相当丑陋的语法,但那只是我挑剔:)与模型相关的业务逻辑方法也应该在模型中定义!

Ext.define('Person', { 
    extend: 'Ext.data.Model', 
    fields: [{ 
     name: 'Name', 
     type: 'string' 
    }, { 
     name: 'Surname', 
     type: 'string' 
    }, { 
     name: 'BirthDate', 
     type: 'date', 
     dateFormat: 'd-m-Y' 
    }, { 
     name: 'Salary', 
     type: 'int' 
    }, { 
     name: 'Married', 
     type: 'boolean' 
    },{ 
     name: 'MyComplicatedFieldName', 
     type: 'auto' 
    }], 

    /** If your model represents some server side data, the proxy should be here */ 
    proxy: { /** ... */ }, 

    /** You can define your own getters and setters, as well as any other 
     methods for handling business logic right here in the model, and you should! 
     */ 

    getCf: function(){ 
     return this.get('MyComplicatedFieldName'); 
    }, 

    setCf: function(value){ 
     this.set('MyComplicatedFieldName', value); 
    } 
}); 

var person = Ext.create('Person', { 
    Name: 'Eugene', 
    Surname: 'Popov', 
    BirthDate: '22-05-1984', 
    Salary: 300, 
    Married: false, 
}); 

person.setCf({}); 

console.log(person.getCf()); // Object {} 

我希望有帮助!

+0

很好的例子。谢谢。 –

+0

很高兴我可以帮助@MichelPhelps!你的getter可能想要利用Ext.util.Format.usMoney(或者任何你的locale!):) –