在Sencha touch中添加HTML和javascript文件到Ext.Panel的最佳方法



是否有一个简单的方法包括外部HTML文件,并在Sencha touch 2.3的Ext.Panel上呈现它们?理想情况下,我希望为HTML文件创建一个包装器模块,然后可以使用xtype对其进行实例化。应该包含一个外部javascript文件来处理外部HTML文件中的事件。

更新:

下面的文件允许在main.js中将keypad.html渲染到Ext.Panel中。

我想知道的是如何正确地包括文件script1.js,以便它执行事件处理。我试过两件事:

  1. 在keypad.html中包含script1.js。结果:无法加载
  2. app/index.html中包含script1.js。结果:加载。但是,由于事件处理程序的设置方式,javascript应该在加载keypad.html之后加载。我试过添加body onload="myFunction()"到keypad.html,然后初始化这个函数内的事件处理程序,但这不起作用。

此外,在btnOk.onclick()中返回答案到app/main.js的简单方法是什么?

应用程序/视图/main.js

Ext.define('TestApp.view.Main', {
    extend: 'Ext.Panel',
    xtype: 'main',
    config: {
        html: loadURL('resources/keypad.html'),
    }
});

loadURL函数在app/globals.js中。global .js包含在app/index.html

function loadURL(url) {
    var oRequest = new XMLHttpRequest();
    oRequest.open('GET', url, false);
    oRequest.setRequestHeader("User-Agent", navigator.userAgent);
    oRequest.send(null)
    return oRequest.responseText;
};

应用程序/资源/keypad.html

<!DOCTYPE html>
<html>
    <head>
        <script src="script1.js"></script>
    </head>
    <body>
    <div id="calculator">
    <div id="display">0</div>
    <div id="numbers">
        <div id="row1">
            <a class='r1'>1</a>
            <a class='r1'>2</a>
            <a class='r1'>3</a>
        </div>
        <div id="row2">
            <a class='r2'>4</a>
            <a class='r2'>5</a>
            <a class='r2'>6</a>
        </div>
        <div id="row3">
            <a class='r3'>7</a>
            <a class='r3'>8</a>
            <a class='r3'>9</a>
        </div>
        <div id = "row4">
            <button type="button" id="buttonCancel">Cancel</button>
            <a class='row4'>0</a>
            <button type="button" id="buttonOk">OK</button>
        </div>
    </div>
    </div>
    </body>
</html>

应用程序/资源/script1.js

window.onload = function () {
    var display = document.getElementById("display");
    var digitIndex = 0; 
    var displayTxt = "0"; 
    var numbers = document.getElementById('numbers');
    /*Called after a number has been clicked*/
    var updateNumber = function(number) {
        if (digitIndex == 0) {
            display.innerHTML = number;
            digitIndex++;
        }
        else if (digitIndex < 10) { 
            display.innerHTML += number;
            digitIndex++;
        }
    }
    /*Event handler*/
    var numberClickHandler = function(e) {
        var number = e.target.innerHTML; 
        if (e.target.id == 'buttonCancel' || e.target.id == 'buttonOk')
          return false;
        updateNumber(number);
    }
    if (numbers.addEventListener) {
      numbers.addEventListener('click', numberClickHandler, false); 
    }
    else if (numbers.attachEvent) { 
      numbers.attachEvent('onclick', numberClickHandler);
    }
    var btnCancel = document.getElementById("buttonCancel");
    btnCancel.onclick = function(event){
        display.innerHTML = "0";
        digitIndex = 0;
    }
    var btnOk = document.getElementById("buttonOk");
    btnOk.onclick = function(event){
        /*Return display.innerHTML to main.js*/
    }
};

您可以在面板中使用iframe,并将iframe src指向html文件的url。

var url = '<div style="height:100%;-webkit-overflow-scrolling:touch;"><iframe style="width:100%;height:100%" src="'+url+'"/></div>';

{
xtype: 'panel',
scrollable:true,
styleHtmlContent : true,                                
html:url    
}

最新更新