`
sailei1
  • 浏览: 126542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Sencha Touch history 理解

 
阅读更多

/**
 * @author Ed Spencer
 * @private
 *
 * Manages the stack of {@link Ext.app.Action} instances that have been decoded, pushes new urls into the browser's
 * location object and listens for changes in url, firing the {@link #change} event when a change is detected.
 *
 * This is tied to an {@link Ext.app.Application Application} instance. The Application performs all of the
 * interactions with the History object, no additional integration should be required.
 */
Ext.define('Ext.app.History', {
    mixins: ['Ext.mixin.Observable'],

    /**
     * @event change
     * Fires when a change in browser url is detected
     * @param {String} url The new url, after the hash (e.g. http://myapp.com/#someUrl returns 'someUrl')
     */

    config: {
        /**
         * @cfg {Array} actions The stack of {@link Ext.app.Action action} instances that have occurred so far
         */
        actions: [],

        /**
         * @cfg {Boolean} updateUrl `true` to automatically update the browser's url when {@link #add} is called.
         */
        updateUrl: true,

        /**
         * @cfg {String} token The current token as read from the browser's location object.
         */
        token: ''
    },

    constructor: function(config) {
        if (Ext.feature.has.History) {
            window.addEventListener('hashchange', Ext.bind(this.detectStateChange, this));
        }
        else {
            this.setToken(window.location.hash.substr(1));
            setInterval(Ext.bind(this.detectStateChange, this), 100); 
// 定时监听 url 变化, 生成action  完成路由跳转
//window.location.hash 真是html5 的好东西呀!!!
        }

        this.initConfig(config);
    },

    /**
     * Adds an {@link Ext.app.Action Action} to the stack, optionally updating the browser's url and firing the
     * {@link #change} event.
     * @param {Ext.app.Action} action The Action to add to the stack.
     * @param {Boolean} silent Cancels the firing of the {@link #change} event if `true`.
     */
    add: function(action, silent) {
        this.getActions().push(Ext.factory(action, Ext.app.Action));

        var url = action.getUrl();

        if (this.getUpdateUrl()) {
            // history.pushState({}, action.getTitle(), "#" + action.getUrl());
            this.setToken(url);
            window.location.hash = url;
        }

        if (silent !== true) {
            this.fireEvent('change', url);
        }

        this.setToken(url);
    },

    /**
     * Navigate to the previous active action. This changes the page url.
     */
    back: function() {
        var actions = this.getActions(),
            previousAction = actions[actions.length - 2],
            app = previousAction.getController().getApplication();

        actions.pop();

        app.redirectTo(previousAction.getUrl());
    },

    /**
     * @private
     */
    applyToken: function(token) {
        return token[0] == '#' ? token.substr(1) : token;
    },

    /**
     * @private
     */
    detectStateChange: function() {
        var newToken = this.applyToken(window.location.hash),
            oldToken = this.getToken();

        if (newToken != oldToken) {
            this.onStateChange();
            this.setToken(newToken);
        }
    },

    /**
     * @private
     */
    onStateChange: function() {
        this.fireEvent('change', window.location.hash.substr(1));
    }
});


0
0
分享到:
评论

相关推荐

    touch-docs-2.2.1.zip(senchaTouch 离线API参考文档)

    这个压缩包“touch-docs-2.2.1.zip”包含了Sencha Touch 2.2.1版本的离线API参考文档,对于深入理解和使用Sencha Touch进行开发具有极大的帮助。 首先,让我们详细了解一下Sencha Touch 2.2.1的核心特性: 1. **...

    Sencha 和 Sencha Touch 简介

    本文通过对 Sencha Touch 框架的介绍,使读者对该框架有一定的了解,并通过一些代码示例给用户更详细直观的对 Sencha Touch 框架功能的了解。 ExtJS ExtJS 是为 web 开发人员提供的基于 JavaScript 和 web 标准快速...

    Sencha Touch in Action

    10. 实战案例:通过具体的开发案例,让读者能更深刻理解Sencha Touch的实际应用。 由于书籍的内容未能详细展示,以上知识点仅是对可能涉及内容的推断,实际上根据书籍的不同章节和结构安排,还可能包含其他更专业和...

    sencha touch 登陆界面

    Sencha Touch 是一款专为移动设备设计的JavaScript框架,它提供了丰富的组件库和强大的数据管理功能,用于...对于初学者来说,理解这一过程有助于更好地掌握Sencha Touch的架构和组件使用,从而进一步提升开发能力。

    Sencha Touch开发的项目《般若人生》源码

    《般若人生》是一款基于Sencha Touch框架开发的移动应用项目。Sencha Touch是一个流行的...对于想要深入理解Sencha Touch框架或者提高移动Web开发技能的开发者来说,《般若人生》的源码是一个宝贵的参考资料。

    sencha touch项目源码

    这个项目源码是基于Sencha Touch开发的一个实例,通过研究这个项目,我们可以深入理解Sencha Touch的工作原理和实际应用。 在开始分析源码之前,先了解一些Sencha Touch的基础知识: 1. **组件系统**:Sencha ...

    一个完整的sencha touch 应用案例

    Sencha Touch 是一款专为移动设备设计的前端框架,它提供了丰富的组件库和强大的数据管理功能,用于构建高性能...学习和研究这个案例,将有助于深入理解Sencha Touch的工作原理以及如何有效地构建触摸友好的移动应用。

    sencha touch list demo

    Sencha Touch 是一款专为移动设备设计的前端框架,它提供了丰富的组件库,用于构建高性能的触屏...通过理解和实践这个示例,开发者可以更好地掌握Sencha Touch中数据驱动UI的设计原则,以及如何创建交互式的移动应用。

    sencha touch 2.4.0最新版

    Sencha Touch 2.4.0 是一个专为移动设备设计的前端JavaScript框架,它使得开发者能够构建功能丰富的、响应式的Web应用程序,这些应用在智能手机、平板电脑等移动设备上表现得如同原生应用一样流畅。这个框架由Sencha...

    Sencha Touch2环境搭建

    Sencha Touch 2是一款专为...最后,记得不断学习和探索Sencha Touch 2的官方文档和社区资源,这将帮助你更好地理解和掌握这个强大的框架。随着实践的积累,你会发现它能帮助你构建出功能强大且用户体验优秀的移动应用。

    sencha touch中文翻译文档

    这个"Sencha Touch中文翻译文档"是针对Sencha Touch 2(ST2)的详细教程和指南,旨在帮助中国开发者更轻松地理解和运用这一框架。 在入门基础部分,文档可能涵盖了以下内容: 1. **安装与设置**:如何下载Sencha ...

    api.zip_sencha _sencha touch api_sencha touch2 api

    总之,"api.zip"文件中的内容,尤其是Sencha Touch 2的API文档,对开发者深入理解并有效利用Sencha Touch框架构建移动应用具有极高的价值。通过深入学习和实践,开发者可以利用这个强大的框架构建出功能强大、用户...

    senchaTouch和fusioncharts结合的实例

    Sencha Touch 和 FusionCharts 的结合使用,是一种在移动设备上创建交互式图表和图形的高效方式。Sencha Touch 是一个流行的JavaScript框架,专门用于构建触摸优化的移动Web应用程序,而FusionCharts则是一款强大的...

    Sencha Touch2 MVC Demo (含源码/数据库)

    Sencha Touch 2 是一个流行的JavaScript框架,专为构建移动Web应用程序而设计。它提供了丰富的UI组件、数据管理...通过研究源码,开发者能够更好地理解Sencha Touch 2的工作方式,从而提升其在移动Web开发领域的技能。

    sencha-touch-1.0.1a.zip_Sencha Touch _sencha touch api_touch

    在学习Sencha Touch时,你需要理解以下概念: 1. **组件系统**:Sencha Touch 基于组件化思想,每个可视元素如按钮、列表都是一个组件,可以通过组合组件创建复杂的用户界面。 2. **模型(Model)与存储(Store)**...

    sencha touch sdk工具

    Sencha Touch SDK工具是开发移动应用的重要资源,尤其对于那些希望使用Sencha Touch框架构建触控友好、跨平台Web应用程序的开发者来说。Sencha Touch是一个强大的JavaScript库,它提供了丰富的UI组件和API,使得...

    Sencha Touch MVC 模式

    通过研究此项目的源码,可以进一步理解Sencha Touch MVC模式的实际应用。 总结来说,Sencha Touch的MVC模式为移动应用开发提供了高效、灵活的框架,通过合理划分模型、视图和控制器的职责,提高了代码的组织和可...

    sencha touch动态加载组件

    通过学习和理解这些代码,你可以更好地掌握如何在实际项目中应用动态加载策略,提升Sencha Touch应用的性能和用户体验。 总之,Sencha Touch的动态加载组件技术对于优化移动应用性能至关重要。通过合理地运用上述...

Global site tag (gtag.js) - Google Analytics