xcode 无法识别 sencha touch javascript 语法
Posted
技术标签:
【中文标题】xcode 无法识别 sencha touch javascript 语法【英文标题】:xcode does not recognize sencha touch javascript syntax 【发布时间】:2013-10-30 11:59:39 【问题描述】:我有一个奇怪的行为。 我在 xcode 4.3 上运行我的 sencha touch 2/phonegap 2.0 应用程序
我的一些视图仅在模拟器/设备上不加载。虽然它在浏览器上加载正常。
我没有在日志中得到任何特殊错误,所以我开始在视图中放置项目。 最后我发现 XCODE 在识别某些 xtype 时遇到问题,例如“fieldset”、“emailfield”、“passwordfield”等。 将“fieldset”更改为“container”并将字段更改为“textfield”后,我的视图已成功加载。奇怪啊?
这发生在以下代码中:
/*
* File: app/view/loginformpanel.js
*
* This file was generated by Sencha Architect version 2.2.2.
* http://www.sencha.com/products/architect/
*
* This file requires use of the Sencha Touch 2.1.x library, under independent license.
* License of Sencha Architect does not include license for Sencha Touch 2.1.x. For more
* details see http://www.sencha.com/license or contact license@sencha.com.
*
* This file will be auto-generated each and everytime you save your project.
*
* Do NOT hand edit this file.
*/
Ext.define('MyApp.view.loginformpanel',
extend: 'Ext.form.Panel',
config:
baseCls: 'fbloginpanel',
id: 'loginformpanel',
itemId: 'loginformpanel',
layout:
type: 'vbox'
,
scrollable:
direction: 'vertical'
,
items: [
xtype: 'container',
flex: 20,
cls: 'fblogin',
layout:
type: 'vbox'
,
items: [
xtype: 'container',
flex: 3,
cls: 'wholepageRelative'
,
xtype: 'container',
flex: 18,
cls: 'wholepageRelative',
layout:
type: 'vbox'
,
items: [
xtype: 'container',
flex: 8,
docked: 'top',
layout:
type: 'vbox'
,
items: [
xtype: 'fieldset',
flex: 2,
cls: 'loginmargin',
docked: 'top',
title: 'Existing User',
items: [
xtype: 'emailfield',
id: 'email1',
itemId: 'email1',
name: 'email1',
placeHolder: 'Email'
,
xtype: 'passwordfield',
id: 'password1',
itemId: 'password1',
name: 'password1',
placeHolder: 'Password'
]
,
xtype: 'button',
flex: 1,
cls: [
'loginmargin',
'Signbutton'
],
docked: 'bottom',
id: 'reglogin',
itemId: 'reglogin',
ui: 'round',
icon: '',
scope: this
]
,
xtype: 'container',
flex: 10,
layout:
type: 'vbox'
,
items: [
xtype: 'container',
flex: 10,
layout:
type: 'vbox'
,
items: [
xtype: 'fieldset',
flex: 4,
cls: 'loginmargin',
docked: 'top',
layout:
type: 'vbox'
,
title: 'New User',
items: [
xtype: 'textfield',
id: 'username',
itemId: 'username',
name: 'username',
placeHolder: 'Username'
,
xtype: 'passwordfield',
id: 'password',
itemId: 'password',
name: 'password',
placeHolder: 'Password'
,
xtype: 'emailfield',
id: 'email',
itemId: 'email',
name: 'email',
placeHolder: 'Email'
,
xtype: 'passwordfield',
hidden: true,
id: 'hashpassword',
itemId: 'hashpassword',
label: 'ססמא',
name: 'hashpassword'
,
xtype: 'numberfield',
hidden: true,
label: 'Field',
name: 'bfacebook'
,
xtype: 'numberfield',
hidden: true,
label: 'Field',
name: 'bregister'
]
,
xtype: 'container',
flex: 4,
minHeight: 100,
layout:
type: 'vbox'
,
items: [
xtype: 'button',
cls: [
'loginmargin',
'Regbutton'
],
docked: 'top',
id: 'regbtn',
itemId: 'regbtn',
ui: 'round',
icon: '',
scope: this
,
xtype: 'button',
cls: 'fbLoginbtn',
docked: 'bottom',
height: '',
id: 'fbloginbtn1',
itemId: 'fbloginbtn1',
ui: ''
]
,
xtype: 'container',
flex: 2,
docked: 'bottom',
height: 50
]
]
]
]
,
xtype: 'toolbar',
cls: 'registerToolbar',
docked: 'top',
items: [
xtype: 'button',
baseCls: 'backbtn',
docked: 'left',
height: '',
id: 'loginbackbtn',
itemId: 'loginbackbtn',
width: '18%'
]
],
listeners: [
fn: 'onLoginbackbtnTap',
event: 'tap',
delegate: '#loginbackbtn'
]
,
onLoginbackbtnTap: function(button, e, eOpts)
//var Screen = Ext.ComponentQuery.query('#fbloginpanel');
Ext.Viewport.setActiveItem(Ext.ComponentQuery.query('#fbloginpanel')[0]);
//Ext.Viewport.show();
);
现在我在其他观点中有更多的问题,甚至没有那些案例。
有人遇到过类似的问题吗? 请帮帮我。
【问题讨论】:
【参考方案1】:只是一个简单的猜测,但您在发布的课程中没有使用“requires”关键字。
您的视图完全有可能无法在模拟器或设备上加载,因为应用不知道如何在构建后解析这些 xtype,因为“开发”和“生产”模式非常不同。
作为最佳实践,始终对您的类使用的每个依赖项使用“requires”。
【讨论】:
谢谢。我正在使用建筑师。所以这是它生成的代码。在我的主要 App.js 中,我看到了 EXT 的要求和路径以及要求。库(还不够): Ext.Loader.setConfig( disableCaching: false, paths: Ext: 'touch/src', 'Ext.device': 'device', 'MyApp.Facebook': 'app/ ' ); Ext.application( 需要: ['Ext.device.Geolocation', 'Ext.device.Notification', 'Ext.TitleBar', 'Ext.data.*', 'Ext.device.Connection' ], 在每个视图中都有一个“requires”配置 - 当您编译/构建应用程序时这是必需的,以便可以将依赖项捆绑在一起。 谢谢。确实是这样。但我只将需求放在 app.js 中,这就足够了。再次感谢。伊莱。 (PS 想知道为什么 android 不需要它?) 是的,我无法解释为什么它在一个地方有效,而在另一个地方无效。乐意效劳!有机会时标记为已接受;-)以上是关于xcode 无法识别 sencha touch javascript 语法的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Sencha Touch 应用程序集成到 Cordova XCode 项目中?
Sencha Touch 2.2.1 Carousel 未初始化
Sencha-Touch:未捕获的类型错误:无法读取未定义的属性“代理”
无法在 Sencha-Touch2 中使用 Ext.Ajax 运行 javascript?