原文地址:

作者:Sencha Support Team

Seth Lemmons:充分利用TaskRunner

有时候,重用正在运行的可以启动和暂停的的任务非常有用。相当幸运,在Ext JS中实现可重用的任务相当容易。Ext.util.TaskManager 是一个单例模式(singleton)的类,它的start方法可以通过传递的配置自动创建任务。或者,也可以创建自己的任务实例。任务会保持一个内部运行的根据间隔时间自动增长的计数器,且可在每次调用start方法进行重置。可以为任务定义一个在任务停止(或取决于如何缓存进度的暂停)时调用的onStop函数。使用fireOnStart配置项可以用来判断任务在调用start方法或在第一次时间间隔过后run函数是否执行正确。

这里有一个创建计时器并允许用户启动和暂停它的示例。任务的进度被缓存它的值属性指向的counter组件中。现在,每当调用stop方法就像暂停这个用例。
可以在来查看它的行为。
如果想阅读更多有关任务间隔(Taskk Intervals)的文档,可参阅。

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配置项。不过,要记住尽可能使用简单的选择符。

本示例的演示可以访问。
如果有一个锚链标记(<a>),且需要捕获tap事件并阻止它进入对应的链接,可以类似第一个示例,使用delegate配置项来实现,不过要告诉监听,这是元素监听,代码如下:

Ext.Viewport.add({    html      : '
You can capture tap event on this
link in your components
', 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,将不会停止事件,不过在移动设备上,它会正常工作。

这个例子的演示可以访问

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"
    想了解更多有关将这些属性继承到自定义脚本的信息,可参阅: