首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Appcelerator Studio LiveView重新编译错误

Appcelerator Studio LiveView重新编译错误
EN

Stack Overflow用户
提问于 2016-09-08 21:31:22
回答 1查看 269关注 0票数 0

当LiveView尝试重新编译时,不断收到此错误。有人能解释一下LiveView是如何工作的吗?对象"Alloy.Globals.layout.activityList“确实存在,但也许LiveView只重新编译了不存在合金全局变量的代码的一部分?

代码语言:javascript
复制
[ERROR] :  Script Error {
[INFO] :   {
[ERROR] :      column = 36;
[ERROR] :      line = 28;
[ERROR] :      message = "undefined is not an object (evaluating 'Alloy.Globals.layout.activityList')";

Appcelerator的"Movies“示例应用程序使用的逻辑与在Alloy.js中创建布局对象的逻辑相同。我正在做完全相同的事情,但是它弄乱了upp的重新编译大约10次中的8次。

代码语言:javascript
复制
/**
 * Calculate element dimensions for given screen size
 * @param {Object} size   containing width and height properties
 */
Alloy.Globals.calculateElementDimensions = function(size) {

  var layout = {};

  layout.device = {};
  layout.device.width = size.width;
  layout.device.height = size.height;

  // lists
  layout.activityList = {};
  layout.activityList.cell = {};

  layout.activityList.cell.width = size.width;
  layout.activityList.cell.height = 60;
  layout.activityList.cell.spacing = 1;

  layout.activityList.cell.dateView = {};
  layout.activityList.cell.dateView.width = layout.activityList.cell.height;
  layout.activityList.cell.dateView.height = layout.activityList.cell.height;

  layout.activityList.cell.detailsView = {};
  layout.activityList.cell.detailsView.width = (layout.activityList.cell.width - layout.activityList.cell.dateView.width) - 50;
  layout.activityList.cell.detailsView.height = layout.activityList.cell.height;

  layout.activityList.cell.deleteView = {};
  layout.activityList.cell.deleteView.width = size.width * 0.2;
  layout.activityList.cell.deleteView.right = (0 - layout.activityList.cell.deleteView.width);
  return layout;
};

// Calculate element dimentsions
Alloy.Globals.layout = Alloy.Globals.calculateElementDimensions(Alloy.Globals.Device);
Alloy.Globals.getCalculatedWidth = function(_percentage){
  return (Alloy.Globals.Device.width * (_percentage / 100));
};

#更新

我想我可能已经找到了触发错误的原因。这看起来实际上并不是运行新的更新代码的问题,而是在关闭和刷新之前有一个错误。

代码语言:javascript
复制
**[INFO] :   [LiveView] Reloading App**
[INFO] :   Login win close
[INFO] :   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[INFO] :   validateLogInInfo
[INFO] :   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[INFO] :   UI SHUTDOWN COMPLETE. TRYING TO RESUME RESTART
[INFO] :   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[INFO] :   RUNNING CODE IN ACTIVITIES.JS
[INFO] :   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**[ERROR] :  Script Error {
[ERROR] :      column = 36;
[ERROR] :      line = 42;
[ERROR] :      message = "undefined is not an object (evaluating 'Alloy.Globals.layout.device')";
[ERROR] :      stack = "Controller\ncreateController\nController\ncreateController\nvalidateLogInInfo\n";
[ERROR] :  }
Alloy.createController('login', {
    callback: validateLogInInfo
  }).getView().open();**

这个错误似乎与我在window.close事件处理程序中运行代码有关。例如,在一个控制器中,我这样做:

代码语言:javascript
复制
  Alloy.createController('login', {
    callback: validateLogInInfo
  }).getView().open();

在login.js中,我做到了:

代码语言:javascript
复制
$.win.addEventListener('close', function(){
  log('Login win close');
  args.callback();
});

我猜回调是在LiveView试图关闭和刷新时尝试运行的,因此出现了编译器错误。删除windoew.close事件中的回调将导致成功重新加载

代码语言:javascript
复制
[INFO] :   [LiveView] Reloading App
[INFO] :   Login win close
[INFO] :   UI SHUTDOWN COMPLETE. TRYING TO RESUME RESTART

那么,提供对其他控制器的关闭事件的回调是完全错误的吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-09 16:34:39

是的,代码看起来是正确的。尝试在LiveView模式和跟踪控制台模式下运行应用程序,然后查看是否有其他原因导致此问题。

请参见图像以设置轨迹模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39392365

复制
相关文章

相似问题

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