在Windows应用商店应用中使用javascript类

时间:2013-02-25 18:31:19

标签: javascript windows-store-apps winjs

我有以下类定义:

var gameEngine = WinJS.Namespace.define("GameEngine", {    

interaction: WinJS.Class.define(
    function() {},
    {
        destination: 0,
        currentXPos: 0,
        handleTouch: function handleTouch(event) {
            this.destination = event.x;
            console.log("New destination: " + this.destination);
        }
    }
),
...

我正在尝试使用handleTouch函数:

WinJS.Namespace.define("drawScreen", {

DrawScreen: WinJS.Class.define(function DrawScreen() {
    canvas.addEventListener("MSPointerUp", gameEngine.interaction.handleTouch, false);

...

问题似乎是gameEngine.interaction.handleTouch未定义。很明显,我没有正确宣布或调用interaction类 - 但是看文档here,我看不出我做错了什么。

2 个答案:

答案 0 :(得分:0)

WinJS.Class.define(的第一个参数是构造函数,第二个参数是成员属性和函数。试试这个:

interaction: WinJS.Class.define(
    function() {},
    {
        // initialize your class here
    }, 
    {
        destination: 0,
        currentXPos: 0,
        handleTouch: function handleTouch(event) {
            this.destination = event.x;
            console.log("New destination: " + this.destination);
        }
    }
),
...

答案 1 :(得分:0)

由于您已在实例声明中将gameEngine.interaction定义为具有您的成员的类,因此您需要首先实例化它的实例。因此,你需要做这样的事情:

var gameInteraction = new gameEngine.interaction();
canvas.addEventListener("MSPointerUp", gameInteraction.handleTouch, false);

如果直接在Namespace中而不是在Class中定义所有interaction类成员,则不需要实例化它。另一种方法是直接在命名空间中实例化类,如:

var gameEngine = WinJS.Namespace.define("GameEngine", {    

interaction: new WinJS.Class.define(
...