很容易地创建动态大量的组件,通常是根据掀起了。这是伟大的渲染从您的服务器的后端或任何其他数据源的数据是权力成分像。
使用只要你想秀台多次相同的组件,这样在应用程序的例子:
- 消息列表中的电子邮件应用程序
- 显示最新消息/鸣叫
- 瓷砖的专辑在HTML5音乐播放器
创建一个简单的DataView
简单地说,一个仅仅是一个的数据,我们用一个简单的模板来呈现每个项目:
在这里,我们只是一切内嵌定义,所以它的所有本地没有从服务器加载。对于每一个在我们的定义的5个数据项,将呈现一个并传递的姓名和年龄数据。该组件将使用我们提供的,使我们提供的花括号占位符中的数据。
因为集成了的任何更改会立即反映在屏幕上的。例如,如果我们添加一个新的记录的它会呈现在我们:
touchTeam.getStore().add({ name:'Abe Elias', age:33});
我们没有手动更新,它只是自动更新。同样的情况,如果我们修改一个现有的记录在:
touchTeam.getStore().getAt(0).set('age',42);
这将让(杰米)的第一条记录,更改至42岁,并自动更新在屏幕上的。
从服务器加载数据
我们经常要加载数据从我们的服务器或其他一些Web服务,这样我们就不必硬编码的所有本地。比方说,我们要加载所有最新的鸣叫约煎茶触摸到一个,并为每一个提供用户的个人资料图片,用户名和鸣叫消息。要做到这一点,我们要做的是修改的 和一点:
不再有硬编码的数据,而不是我们提供了一个,为我们获取数据。在这种情况下,我们使用了JSON-P代理,这样我们就可以加载来自Twitter的搜索API的JSON-P。我们还指定了每个推的领域,商店的配置和使用自动加载。最后,我们配置了一个读卡器解码Twitter的响应,告诉它期望JSON的Twitter信息中可以找到的“结果”部分的JSON响应。
我们做的最后一件事是更新我们的模板呈现图像,Twitter用户名和消息。现在我们需要做的就是添加一个小的CSS样式列表的方式,我们希望它...
一个DataView样式
现在你可能已经意识到,尽管我们的显示数据,从我们的,它不具有任何默认的样式。这是由设计,但添加自定义CSS是很简单的。,有两个配置,这样就可以针对您的自定义CSS到您的视图:和。,是用来添加一个类名
左右的外部元素的。您提供的被添加到每个项目呈现到我们。
如果不指定一个,则它会自动拍摄配置(默认为X-数据视图
)和前置项
。因此,每个项目将有一个类名X-数据视图项
。
但我们添加该配置前,我们需要创建我们的自定义CSS。以下是一个简单的例子:
.my-dataview-item { background:#ddd; padding:1em; border-bottom:1px solid #ccc;}.my-dataview-item img { float: left; margin-right:1em;}.my-dataview-item h2 { font-weight: bold;}
一旦我们有了,完整的,我们可以回到我们以前的Twitter的例子,添加配置:
组件的DataView
以上我们创建与,这意味着每个项目从呈现。然而,有时你需要每个项目的一个组成部分,因此您可以为您的用户提供了丰富的UI。煎茶触摸2,我们介绍了配置,让您做到这一点。
创建组件创建一个正常的基于模板像上面是非常相似的,但是你必须定义,项目视图呈现时使用您的列表中的每个项目。
('MyListItem',{ extend:'', requires:[''], xtype:'mylistitem', config:{ nameButton:true, dataMap:{ getNameButton:{ setText:'name'}}}, applyNameButton:function(config){ returnExt.factory(config,,this.getNameButton());}, updateNameButton:function(newNameButton, oldNameButton){ if(oldNameButton){ this.remove(oldNameButton);}if(newNameButton){ this.add(newNameButton);}}});
以上是如何定义的基于组件的项目组成部分的一个例子。有几个重要的注意事项:
- 我们必须延长每个项目。这是一个抽象类,它处理的每个项目的记录处理。
- 下面的扩展,我们需要。这仅仅是因为我们要在我们的项目组件插入一个。
- 然后,我们指定
的xtype
这个项目的组成部分。 - 在我们的配置块我们定义
nameButton,
。这是一个自定义的配置,我们添加这个组件将被改造成一个。默认情况下,我们将它设置到真正的
,但是这也可能是一个配置块。此配置会自动生成getter和setter方法我们nameButton
。 - 接下来,我们定义的。数据地图是地图之间的数据,这个观点。该
getNameButton
是要更新的情况下,你的getter,所以在这种情况下,我们想要得到的nameButton
配置该组件的。然后,该块内,我们给它的setter,例如,在这种情况下,是的setText
和领域的记录,我们传递给它。因此,一旦这个项目的组件获得创纪录的nameButton
,然后调用的setText
的名义
值的记录。 - 然后,我们定义的apply方法为我们的
nameButton
。apply方法使用Ext.factory 的一个实例传递到转换的配置。该实例,然后返回,这样会导致被称为updateNameButton
。简单的updateNameButton
方法删除旧的nameButton,例如,如果它存在,并添加新的的nameButton举例来说,如果它的存在。
现在,我们已经创建了该项目的组成部分,我们可以创建组件,我们如何做之前类似。
('',{ fullscreen:true, store:{ fields:['name','age'], data:[{ name:'Jamie Avins', age:100},{ name:'Rob Dougan', age:21},{ name:'Tommy Maintz', age:24},{ name:'Jacky Nguyen', age:24},{ name:'Ed Spencer', age:26}]}, useComponents:true, defaultType:'mylistitem'});
有两个重要的补充。首先,我们添加配置,将其设置为真
。其次,我们设置了配置,以我们的的项目组成部分mylistitem的
。这告诉我们定义的项目每个项目的视图组件使用。
现在,如果我们运行这个代码放在一起,我们可以看到该组件的行动。
关于这个伟大的事情就是它的灵活性,它可以增加你的数据视图。每个项目组件都有其自己的,所以你可以做任何事的。
下面我们添加一个事件监听器,水龙头事件我们nameButton
,这将提醒用户选定的人随着年龄的。
('MyListItem',{ //... updateNameButton:function(newNameButton, oldNameButton){ if(oldNameButton){ this.remove(oldNameButton);}if(newNameButton){ // add an event listeners for the `tap` event onto the new button, and tell it to call the onNameButtonTap method// when it happens newNameButton.on('tap',this.onNameButtonTap,this);this.add(newNameButton);}}, onNameButtonTap:function(button, e){ var record =this.getRecord();( record.get('name'),// the title of the alert"The age of this person is: "+ record.get('age')// the message of the alert);}});
当我们将此代码添加到我们上面的例子中,我们得到了最终的结果: