作者:Sencha Support Team
Seth Lemmons:充分利用TaskRunner
有时候,重用正在运行的可以启动和暂停的的任务非常有用。相当幸运,在Ext JS中实现可重用的任务相当容易。Ext.util.TaskManager 是一个单例模式(singleton)的类,它的start方法可以通过传递的配置自动创建任务。或者,也可以创建自己的任务实例。任务会保持一个内部运行的根据间隔时间自动增长的计数器,且可在每次调用start方法进行重置。可以为任务定义一个在任务停止(或取决于如何缓存进度的暂停)时调用的onStop函数。使用fireOnStart配置项可以用来判断任务在调用start方法或在第一次时间间隔过后run函数是否执行正确。
这里有一个创建计时器并允许用户启动和暂停它的示例。任务的进度被缓存它的值属性指向的counter组件中。现在,每当调用stop方法就像暂停这个用例。
可以在https://fiddle.sencha.com/#fiddle/1ca来查看它的行为。
如果想阅读更多有关任务间隔(Taskk Intervals)的文档,可参阅http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.util.TaskRunner。
Mitchell Simoens:Sencha Touch中的事件委托
你知道吗,即使没有在MVC应用程序中使用控制器,容器也可以监听子组件的事件?有两种方法可以实现这个:
Ext.Viewport.add({ layout : { type : 'card', animation : 'slide' }, items : [ { html : 'Card One', items : [ { xtype : 'button', ui : 'forward', text : 'View Details' } ] } ], listeners : { delegate : 'button[ui=forward]', tap : function(button, e) { this.setActiveItem({ html : 'Details are here!' }); } } });
在上面的示例中,在容器中使用了卡片布局。第一张卡片中包含一个子按钮,预期的效果是通过子按钮的tap事件在顶层容器显示详细视图。不过,由于未来可能将按钮移动到工具栏上,所以不希望直接在这里监听按钮的事件。为了做成防护措施,在这里可以在顶层容器添加监听并采用委托事件来实现,而它的目标就是按钮的ui属性值forward。配置项delegate会使用到ComponentQuery的选择符,选择符可以是简单的,也可以时候复杂的,看你需要。但我的建议是尽量保持简单。
这个示例的演示可以浏览https://fiddle.sencha.com/#fiddle/1f9。
如果是使用Ext.define自定义的组件,可以使用control配置项,就像在控制器中一样,代码如下:
Ext.define('MyContainer', { extend : 'Ext.Container', xtype : 'mycontainer', config : { layout : { type : 'card', animation : 'slide' }, items : [ { html : 'Card One', items : [ { xtype : 'button', ui : 'forward', text : 'View Details' } ] } ], control : { 'button[ui=forward]' : { tap : 'onButtonTap' } } }, onButtonTap : function(button, e) { this.setActiveItem({ html : 'Details are here!' }); } }); Ext.Viewport.add({ xtype : 'mycontainer' });
和第一个示例一样,在control配置项中,使用了按钮的ui属性值forward来切换详细视图。要注意的是,tap事件映射的onButtonTap方法是在顶层的MyContainer组件中定义的。当要实现将子组件的事件定义在容器这种方法,就可是有control配置项。不过,要记住尽可能使用简单的选择符。
本示例的演示可以访问https://fiddle.sencha.com/#fiddle/1fa。
如果有一个锚链标记(<a>),且需要捕获tap事件并阻止它进入对应的链接,可以类似第一个示例,使用delegate配置项来实现,不过要告诉监听,这是元素监听,代码如下:
Ext.Viewport.add({ html : '<div>You can capture tap event on this <a href="#" class="tappable">link</a> in your components</div>', listeners : { element : 'element', delegate : 'div a.tappable', tap : function(e, t) { e.stopEvent(); Ext.Viewport.removeAll(); Ext.Viewport.setHtml('You tapped it!'); } } });
可以使用element配置项来告诉监听现在监听的是基于组件元素的事件,且使用delegate配置项来为tap事件监听特定元素。在这里,delegate配置项使用了DOM选择符,选择符可以使用所需的任何选择符,但我建议尽可能的保持简单。要注意的是,在浏览器上,如Google Chrome,将不会停止事件,不过在移动设备上,它会正常工作。
这个例子的演示可以访问 https://fiddle.sencha.com/#fiddle/1fb。
Greg Barry:在Sencha Cmd 中隐藏Gems
Sencha Cmd严重依赖于一组已知的有关你的环境变量和应用程序的内部属性。这些属性包括软件路径、系统设置和Sencha软件版本。
在命令行中,只要在项目根目录中输入以下命令就可以查看和使用这些信息:
sencha diag show
通过命令行或自定义ANT脚本都就可以查看所有这些属性。
还可以很容易的查看到一些属性的设置位置。通常可以根据命名空间来确定属性的源,例如:
- app. — 查看"app.json"和".sencha/app/sencha.cfg"
- workspace. — 查看"workspace.json"和".sencha/workspace/sencha.cfg"
- framework. — 在Ext JS或Sencha Touch的SDK中查看"cmd/sencha.cfg"
- cmd. — 在Sencha Cmd安装目录中查看"sencha.cfg"
想了解更多有关将这些属性继承到自定义脚本的信息,可参阅: http://docs.sencha.com/extjs/4.2.2/#!/guide/command_advanced