在WinJS中传递实例类

时间:2013-02-27 19:48:57

标签: javascript windows-store-apps winjs

我正在尝试传递类实例,以便我可以保留其成员变量。我有以下代码

var mainNamespace = WinJS.Namespace.define("MainNamespace", {        
    setupClass: WinJS.Class.define(
        function () { },
        {
            createSetup: function CreateSetup() {                
                var interactionInst = new mainNamespace.interaction();

                drawScreen.DrawScreen(interactionInst);
                var backgroundProc = new 
                        mainNamespace.createProc(interactionInst);                
        }
    ),
    interaction: WinJS.Class.define(
        function() {},
        {
            clickedPos: 0,
            handleTouch: function handleTouch(event) {
                this.clickedPos = event.x;
                console.log("New pos: " + this.clickedPos);
        }
    ),

    createProc: WinJS.Class.define(
        function (interaction) {
            setInterval(this.runProc, 1000, interaction);
    },
    {

        runProc: function runNewProc(interaction) {
            console.log(interaction.clickedPos);
        }        
       ...        

drawScreen namepsace如下:

WinJS.Namespace.define("drawScreen", {
    DrawScreen: WinJS.Class.define(
    function DrawScreen(interaction) {
        /// Do some screen set-up here

        canvas.addEventListener("MSPointerUp", interaction.handleTouch, false);
    }
)


});

我遇到的问题是interaction.clickedPos永远不会改变。为什么它没有改变,我是否正确地使用这个javascript应用程序?

编辑:

我现在已经解决了为什么会发生这种情况,但不知道如何修复它。当interaction.handleTouch触发时,this引用canvas对象,而不引用interaction对象 - 因此我无法访问其成员。

1 个答案:

答案 0 :(得分:1)

问题出在以下几行:

canvas.addEventListener("MSPointerUp", interaction.handleTouch, false);

这里传递对函数handleTouch()的引用,而不与当前实例(交互)建立任何连接。您可以使用.bind()方法更改事件处理程序的上下文:

canvas.addEventListener("MSPointerUp", interaction.handleTouch.bind(interaction), false);