2013-03-28 75 views
0

我正在构建一个启动计时器,执行一些随机操作,然后关闭计时器并报告执行花费多长时间的testscript。这是我走到这一步:Sencha Touch 2 - 执行顺序/优先级

Ext.define('project.view.test', { 
extend: 'Ext.Panel', 
xtype: 'test', 

config: { 
    styleHtmlContent: true, 
    scrollabe: 'vertical', 
    title: 'test', 
    tpl: '<p id="time"></p>' 
}, 
initialize: function() { 
    this.measureTime(); 
}, 
measureTime: function() { 
    var startTime=new Date(); 
    a = 2; 
    for(i=0; i<1000; i++) { 
     a = a*a*a*i; 
    } 
    var b=Math.floor((new Date()-startTime)/100)/10; 
    document.getElementById('time').innerHTML = b; 
} 

}); 

这里的问题是,我得到的错误:

Uncaught TypeError: Cannot set property 'innerHTML' of null 

在这里,我的猜测是,之后的JS代码是HTML对标签渲染执行。真的吗?我以为脚本是通过操作执行的,而且html代码在js代码之上,这让我很困惑。

我试图把javascript放在html/tpl标签(在配置中)。它消除了错误,但没有任何内容被写出来。为什么?什么命令都执行,我该如何解决这个问题?

+0

关于'tpl'属性的文档说“**注意** [data](http://docs.sencha.com/touch/2-1/#!/api/Ext.Component-cfg-data )配置必须设置为在组件中显示的任何内容当使用这种配置时。“因此你可能会得到意想不到的结果。 – jprofitt

回答

2

我假设你要分配里面<p id="time"></p>

b价值的最终结果应该是这样的<p id="time">0</p>它,因为你的b值始终为0。

首先,给你的面板中的itemId

itemId: 'test' 

然后,您可以使用该面板引用dom元素:

var panel = Ext.ComponentQuery.query('#test')[0].element.dom; 

,并设置使用innerText代替innerHTML值:

panel.innerText = b; 

顺便说一句,请记住,因为你没有使用任何存储,以便data配置是强制性

以下是演示:http://www.senchafiddle.com/#Y30Ul

+1

谢谢。这是一个很好的答案,值得大赞!干得好,user1479606,非常感谢! – Thomas