1

そこで、html で定義されたボタンが押されたときに関数を呼び出したいと思います。問題は、コンソールに「参照エラー: 関数が定義されていません」というエラーが記録されることです。

私のoutput.js(結合およびコンパイルされたtypescript)の簡素化されたレイアウトは次のようになります:

window.onload = function () {
    var game = new SpaceGen.Game();
};
var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var SpaceGen;

(function (SpaceGen) {
    var Game = (function (_super) {
        __extends(Game, _super);
        function Game() {
            _super.call(this, 512, 640, Phaser.AUTO, 'content');

            this.state.add('state_World', SpaceGen.World, false);

            this.state.start('state_World');
        }
        return Game;
    })(Phaser.Game);
    SpaceGen.Game = Game;
})(SpaceGen || (SpaceGen = {}));

var SpaceGen;
(function (SpaceGen) {
    var World = (function (_super) {
        __extends(World, _super);
        function World() {
            _super.apply(this, arguments);
            ...
        }    

        World.prototype.getSeed = function () {
            console.log("submitted");
            var seed = document.getElementById('seed')[0].value;
        };        
        return World;
    })(Phaser.State);
    SpaceGen.World = World;
})(SpaceGen || (SpaceGen = {}));

次のようにhtmlファイルで関数を呼び出します。

<input id="seed" type="number" name="seed" value="111" />
<button onclick="getSeed()">Start</button>

output.js (およびこれは Phaser を使用しているため、phaser.js) がロードされ、(他の) すべてが正常に動作します。

関数を呼び出すにはどうすればよいですか? 私は this.game.getSeed() 、 game.getSeed() など、かなり多くのことを試しました。

4

1 に答える 1

5

getSeedの方法ですSpaceGen.Worldonloadハンドラーでプライベート変数としてインスタンス化したため、属性ハンドラーからアクセスする方法はありません。

最も簡単な解決策は、グローバルを作成することです。ただし、最善の方法は、HTML 属性ではなく、スクリプトを使用してハンドラーを登録することです。

<button id="my-button">Start</button>

window.onload = function () {
    var world = new SpaceGen.World();
    var button = document.getElementById('my-button');
    button.addEventListener('click', function(){
        alert(world.getSeed());
    })        
};
于 2014-05-13T19:54:42.943 に答える