4

これを直接説明する方法さえわかりませんが、試してみます。

はじめに

angularjs を使用して Phonegap アプリを構築しています。WebSocket メッセージをつなぎ合わせて UI を更新しようとしています。サーバーと定期的に通信し、それに応じてデータを変更するサービスを使用していましたが、かなりうまく機能していました。例:

Service1.js :

     var applyUpdate = function (
         angular.extend(instance, data);
         if (!$rootScope.$$phase) $rootScope.$apply();
     };

     this.update = function () {
         DataProvider.get('getThermostatSettings', {}, applyUpdate, function(){}, true);
     }

つまり、基本的には、5 秒ごとに「更新」関数を呼び出し、サーバーからデータを受信して​​このサービスを更新するだけでした。コントローラーはこのサービスにアクセスするだけで、すべてが機能していました。

問題

今の問題は、すべての websocket 実装を処理する Java で記述された WebSocket インターフェイスを作成したことです。https://github.com/ziadloo/PhoneGap-Java-WebSocketから取得しました。基本的には、Javascript からアクセスできる Javascript Interface を登録して、Java と通信します。

変更があるたびに、WebSocket を介してサーバーから文字列をプッシュし、更新する必要があることを伝えてから、定期的にデータを照会する代わりに、javascript でサービスから「更新」関数を呼び出します。バカ。

WebSocket はうまく機能しています。私はメッセージが来るのを見ることができます、私はアップデートを呼び出します、それはサーバーからすべてを正しくフェッチし、「アップデート」関数は正しい値で「適用更新」を呼び出します.

しかし、angular Service 内のすべての更新されたデータは表示されません! これらの変更はすべて別のスレッドで実行されているようです!?!? . JavaScript がシングル スレッドであることは知っていますが、そのように思えます。

これをより良い言い方にしましょう: WebView が JavaScript コールバック関数を呼び出すとすぐに、別の JavaScript "スレッド" が実行され、その外部には何もアクセスできないという印象があります。

詳しくは

単純に5 秒ごとに数値を出力する関数を作成しました。Websocket はこの番号を更新します。そして、私の出力は次のとおりです。

N: 1
N: 1

次に、WebSocket が新しい番号 (2) でデータをプッシュした後、2 つの印刷物を取得します。

N: 1
N: 2

N: 1
N: 2

N: 1
N: 2

誰にもこれについての指針がありますか?似たようなことをやってみた人はいますか?私はAngularのプロではありませんが、Javaインターフェイスからコールバックを受け取るとすぐにすべてが台無しになるようです.

私はすでに見ました: Angularjs model changes after websocket data push from serverと私のコードは非常に似ています。私が思う唯一の問題は、Java からのこのコールバックです。

ありがとうございました

更新: AngularJS の問題です。この変数をウィンドウのグローバル変数に設定すると、すべてが正常に割り当てられます。Angular が何らかの形で 2 つの異なる $scopes を作成している可能性はありますか?

Update[2] : もう少し明確にするために: ブラウザーでは、すべてが期待どおりに機能します。これが台無しになるのは、エミュレーターで実行した場合のみです。

4

1 に答える 1

2

Angular.js が 2 つの $scope を作成することは完全に可能です。このスクリーンキャストでデバッグを見てください。

ページ上のすべての $scopesを表示すると役立つ場合があります。

また、モバイルでの websocket は最良のアイデアではないことにも注意してください。その話 (Websock の専門知識を持つ Nodejitsu の従業員による) に基づいて、クラッシュと障害が発生する可能性はかなり高いようです。

于 2013-04-01T02:50:27.807 に答える