hasMany关联和Ext.data.Store之间有什么区别

时间:2015-01-18 18:47:46

标签: extjs

hasMany关联和Ext.data.Store之间的区别是什么?

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',  type: 'int'},
        {name: 'name', type: 'string'}
    ]
});

var myStore = Ext.create('Ext.data.Store', {
    model: 'User'
});
var user = Ext.create('User', {
    id: 1, name: 'Eugene'
});
myStore.add(user);
alert(myStore.count()); 

ex2:hasMany

Ext.onReady(function(){
    Ext.define('Company', {
        extend: 'Ext.data.Model',
        fields: [{
        name: 'Title',
        type: 'string'
        },{
        name: 'Date',
        type: 'date',
        dateFormat: 'd-m-Y'
        }, {
        name: 'Value',
        type: 'int'
        }],
        associations: [{
        type: 'hasMany',
        model: 'Manager',
        name: 'founders'
        }]
    });

    Ext.define('Manager', {
        extend: 'Ext.data.Model',
        fields: [{
        name: 'FirstName',
        type: 'string'
        }, {
        name: 'LastName',
        type: 'string'
        }]
    });
    var company = Ext.create('Company', {
        Title: 'Microsoft',
        Date: '01-01-1974',
        Value: 30000
    });
    company.founders().add({
                FirstName: 'Bill',
                LastName: 'Gates'
                }, {
                FirstName: 'Paul',
                LastName: 'Allen'
            });
    company.founders().each(function (founder){
        alert(founder.get('FirstName') + " "+founder.get('LastName'));
    });
});

为什么要为坏人创建新机制?

1 个答案:

答案 0 :(得分:0)

我认为你可能会混淆两者,说实话,他们是完全不同的东西。

商品

ExtJs商店基本上是一个聪明的数组,允许您维护一个列表/模型集合。引用文档:

  

Store类封装了Model对象的客户端缓存。   存储通过代理加载数据,并提供排序功能,   过滤和查询其中包含的模型实例。

     

模型通常与商店一起使用,基本上是商店   记录集合(模型派生类的实例)。

示例:商店公司包含20个公司模型,如下所示:

公司:

  • 公司1
  • ...
  • 公司20

HasMany协会

HasMany是模型上的关联,非常类似于关系数据库。因此,您可能拥有公司模型和员工模型。公司可以有很多员工。

  

可以使用Associations API将模型链接在一起。最   应用程序处理许多不同的模型和模型几乎   永远相关。博客创作应用程序可能具有模型   用户和帖子。每个用户创建帖子。所以在这种情况下,用户可以   有多个帖子,但帖子只有一个用户创建它。   这被称为ManyToOne关系。

当你将这两件事结合起来时,你可以得到一个模型列表及其所有相关记录。因此,对于基本代码示例(伪代码),您可能会执行以下操作:

var companies = new App.stores.Companies(); // here is your collection of companies

companies.each(function(company) {
    var employees = company.employees(); // here is where your hasMany comes in
    // for each employee give a pay rise or something...
});

旁注:ExtJ中的关联并非没有问题,它们的功能可能有限,很难做到正确。很多人一开始往往会遇到问题,请参阅here

Sencha Docs中的data package指南非常清楚地解释了这一点,这也是上述引文的来源。

希望这有帮助