原文:Designing Responsive Applications with Ext JS
在当今这个时代,用户都希望Web应用程序无论在形状还是大小上,既能在桌面电脑,也能在移动设备上使用。使应用程序能适应不同的需求渐成趋势。幸运的是,Ext JS 5提供了所有支持应用程序以符合任何屏幕尺寸、形状和方向的工具。
要让Ext JS 5支持新的平板电脑,需要使用“responsiveConfig”,一个强大的新功能,可以让应用程序根据屏幕大小和方向进行动态响应。使用以下两个类其中之一就可以启用responsiveConfig:
处于性能原因,Ext JS组件默认是没有开启响应功能的,因此,如果要让组件启用响应功能,需要使用响应插件。将响应插件添加到类内,就可以让所以实例实现响应,或者将它添加到实例的配置对象中以咋单个组件实例中开启响应功能:
plugins: 'responsive'
Ext.define('MyApp.view.Main', { extend: 'Ext.tab.Panel', plugins: 'responsive', responsiveConfig: { landscape: { tabPosition: 'left' }, portrait: { tabPosition: 'top' } }, items: [ { title: 'Foo' }, { title: 'Bar' } ] });
在responsiveConfig对象中的每一个键,或规则,只是一个简单的javascript表达式。以下变量可用来作为responsiveConfig对象的规则:
可以以不同的方式来组合这些变量来创建复杂的响应规则,例如,以下responsiveConfig会在viewport宽度少于768像素且高度大于它的宽度时隐藏组件:
responsiveConfig: { 'width < 768 && tall': { visible: true }, 'width >= 768': { visible: false } }
在内部,框架会监控viewport的大小和方向的变化,并在任何这些事件发生时,重新计算所有的响应规则。在配置中的任何匹配的规则都会调用修改方法(setter),这意味着,对于用在responsiveConfig中的配置项,它必须有一个修改方法,如在以上示例中能使用visible,是因为Ext.Component有一个setVisible方法。
responsiveConfig通常是用于组件的,不过有时可能需要让类根据屏幕大小做出响应。对于非Ext.Component的类,可通过混入 Ext.mixin.Responsive来实现,例如,以下类的实例会在屏幕形状从tall变为wide时更新foo的值,反之亦然。
Ext.define('MyClass', { mixins: ['Ext.mixin.Responsive'], config: { foo: null }, responsiveConfig: { wide: { foo: 1 }, tall: { foo: 2 } }, constructor: function(config) { this.initConfig(config); }, updateFoo: function(foo) { console.log(foo); // logs "1" or "2" as screen shape changes between wide and tall } });
为了确保使用Ext JS新的响应式设计特性所设计的真实应用程序能经得起考验,我们创建了一个利用responsiveConfig以适应桌面与平板等广泛屏幕尺寸和方向的应用程序,该应用程序可在这里下载。
试着调整桌面浏览器窗口的大小或旋转平板电脑,并观察以下应用程序的表现和布局变化:
在wide模式,主导航将会定位在左边,而咋top模式在定位在顶部。
在tall模式,标签的图标会对齐于顶部,而在wide模式会对齐于左边。
在tall模式,标签文本将会居中显示,而在wide模式将会对齐于左边。
在tall模式,屏幕对于导航栏来说会变得很窄,这时,将会显示溢出菜单工具,并将导航条目显示在菜单中。
我们确信Ext JS 5的这些新特性将会使跨设备应用程序的开发变得容易,我们希望你们去试一下。说不定,这会很有乐趣!
作者:Phil Guerrant
Phil is a Sencha software engineer who works on Ext JS. He has over 10 years of experience as a developer and specializes in HTML5 and web development, UI, and agile methodologies.