首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >感应器触控覆盖ext.ajax

感应器触控覆盖ext.ajax
EN

Stack Overflow用户
提问于 2013-06-06 19:53:44
回答 3查看 3.8K关注 0票数 1

我正在用sencha架构师编写一个感光触摸应用程序。因为我的应用程序需要处理大量ajax请求,所以大多数应用程序都需要在请求头中发送“令牌”以进行身份验证。因此,我想创建基于Ext.Ajax的子类,它总是在请求头中有“令牌”。然后,我可以使用这个子类,而不需要处理标题。

代码语言:javascript
复制
MyApp.override.Ajax.request({ ... })

我尝试在app/override/Ajax.js中定义这一点。

代码语言:javascript
复制
Ext.define('Myapp.override.Ajax', {
  override: 'Ext.Ajax',
  headers: {
      'token': 'test'
  }
});

在应用程序中,我还将其设置为“requires”。但是当尝试调用时会出错

代码语言:javascript
复制
Myapp.override.Ajax.request({ ... })

似乎Myapp无法找到.override包(MyApp.override未定义)

如何让MyApp知道覆盖包,或者什么是正确的/最好的方法来做到这一点。

一个快速的例子是非常感谢的。非常感谢。

更新信息:

覆盖文件位置: app\override\Ajax.js

html文件:

代码语言:javascript
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
    var Ext = Ext || {};
    Ext.theme = {
        name: "Default"
    };
</script>
<script src="sencha-touch-all-debug.js"></script>
<link rel="stylesheet" href="resources/css/sencha-touch.css">
<script src="app/override/Ajax.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body></body>
</html>

app.js文件

代码语言:javascript
复制
Ext.Loader.setConfig({

});

Ext.application({

requires: [
    'MyApp.override.Ajax'
],
views: [
    'ContactDetailView'
],
name: 'MyApp'
...

App可以在没有错误的情况下启动,但是当调用MyApp.override.Ajax.request :无法读取未定义的属性'Ajax‘时,意味着MyApp.override是未定义的。

更新

这里有一些新闻,它更好,但还没有发挥作用。

代码语言:javascript
复制
Ext.define('MyApp.Ajax', {
extend: 'Ext.data.Connection',
singleton: true,

request: function( options ) {
    this.constructor(options, options.url);
console.log(options);
    options.header = {'Token':'mytoken'};
    this.callParent( options );
}
});

并在尝试MyApp.Ajax.request()时出错。通过查看日志,我确信options.url存在于选项中

代码语言:javascript
复制
[ERROR][Ext.data.Connection#request] No URL specified 

我从构造函数中添加扩展。

代码语言:javascript
复制
constructor : function (config, url)
{
    config = config || {};
//config.url = 'google.com';
    this.initConfig(config);
    this.callParent(config);
},

当我从config.url =‘google.com’中删除注释时,错误就消失了;但是config.url那里有ajax请求url但是本地文件url?我从铬控制台和网络上看到的?

代码语言:javascript
复制
GET file:///C:/MyApp/assets/www/google.com?_dc=1370855149720  

请帮帮忙。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-16 18:10:18

最后,这是和我一起工作

代码语言:javascript
复制
Ext.define('MyApp.Ajax', {    
    extend: 'Ext.data.Connection',

    singleton: true,

    request: function( options ) {
        options.headers = {
            Token: 'mytoken',
        };
        this.callParent( [options] );
    }
});

这个简单的人也能做我想做的事,太好了。

代码语言:javascript
复制
Ext.Ajax.on('beforerequest', (function(conn, options, eOpts) {  
    options.headers = {
        Token: 'mytoken',
    };
}), this);
票数 2
EN

Stack Overflow用户

发布于 2013-06-08 02:11:14

对于覆盖类的名称,您似乎不太同意:

  • Myapp.override.Ajax
  • Lunex.override.Ajax
  • Myapp.override.data.proxy.Ajax

是哪一个?注意这点,装载机不会轻易的.

不管怎么说,你似乎对overrideextend有点困惑。

extend确实从父类创建了一个新类,并进行了您指定的修改。然后,您可以使用您定义的类,就像您想要做的那样。

另一方面,override将修改应用于现有的类。在这种情况下,类名仅用于require语句,并由加载程序使用。没有创建实际的类。因此,在您的示例中,名称空间MyApp.override没有定义,因此出现了错误。不过,无论何时使用Ext.Ajax,都应该发送自定义标头。如果您是加载文件的管理员,即;p

现在,您的情况有点特殊,因为Ext.AjaxExt.data.Connection单例实例。看看它的代码,里面没什么。尽管覆盖一个独生子女是有意义的,但从这个意义上延伸下去会让人感到不安。

所以,你可能想做的是:

代码语言:javascript
复制
Ext.define('Myapp.Ajax', {
    extend: 'Ext.data.Connection',
    headers: {
        'token': 'test'
    }
});

这样你就可以:

代码语言:javascript
复制
Myapp.Ajax.request({ ... });

这里的最佳选择是覆盖还是扩展,这是一个棘手的问题。我很高兴你没问我!

票数 1
EN

Stack Overflow用户

发布于 2014-10-23 18:34:18

为什么不在扩展类中使用config 'defaultHeaders‘呢?以这种方式,它总是添加到您的标题中。

http://docs-origin.sencha.com/touch/2.4.0/apidocs/#!/api/Ext.data.Connection-cfg-defaultHeaders

从Ext.data.Connection的源头

代码语言:javascript
复制
setupHeaders: function(xhr, options, data, params) {
    var me = this,
        headers = Ext.apply({}, options.headers || {}, me.getDefaultHeaders() || {}),
        contentType = me.getDefaultPostHeader(),
        jsonData = options.jsonData,
        xmlData = options.xmlData,
        key,
        header;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16971028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档