4

多分私は夢中になっているかもしれませんが、これは固執するような基本的なことのようです、私は現在ブラックベリーにコンパイルしている基本的なphonegapアプリを持っていますが、リップルエミュレーターでそれをテストできるようにしたいです、私のコードはここで変更されます明確にするために、しかし以下を見てください...

index.htmlに次の初期化コードがあります。

    function onLoad() {
                if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
                document.addEventListener("deviceready", onDeviceReady, false);
                } else {
                    onDeviceReady();
                }
            }

            function onDeviceReady() {
                // Now safe to use the Cordova API
                var program = new app2();
                program.Login();
            }
    }

index.jsでは、次の単純なオブジェクトです。

var app2 = function(){
    this.Login = function() {
        alert($("#project_list").html());
        this.LoadContent();
    }

    this.LoadContent = function() {
        alert($("#project_list").html());
    }
}

今のところ、project_list要素に「test」という文字列があるだけなので、期待される出力は次のようになります。

"テスト"

"テスト"

そして、それはリップルエミュレーターを除いてどこにでもあります。リップル出力は以下の通りです

"テスト"

"未定義"

オブジェクト内のメソッドを呼び出すとすぐに、DOMが完全に失われたように見えるので、これに頭を悩ませています。なぜこれが当てはまるのか誰かが提案できますか?

4

1 に答える 1

1

コードを次のように変更します

var app2 = function(){
    var that=this;
    this.Login = function() {
        alert($("#project_list").html());
        that.LoadContent();
    }

    this.LoadContent = function() {
        alert($("#project_list").html());
    }
}

その所有者であるjavascriptという意味で書いている限り。あなたの場合、関数内に書くと、 inの所有者は:のプロパティです。そうではありません。thisthisthis.LoadContent()this.Login()thisthis.Login()Loginapp2app2.Loginapp2

これを回避するために、 を実行してthisの変数を保存します。したがって、変数は常に を指しています。その所有者は です。app2var thatvar that = thisthatapp2app2

thatのメンバー変数ですapp2。そのため、を含むthat他のすべてのメンバー変数にアクセスできます。app2Login

于 2013-02-10T15:39:11.543 に答える