3

現在、Javascript アプリケーションを作成しています。これにはAppJSを使用しています。

クライアントとサーバー間の接続を理解するのに問題があります。

メニューバー -> ソケットの問題

問題は、メニューバーとソケットの組み合わせです。

ソケット接続

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    socket.emit('onMessage', {
        date: new Date(),
        message: 'Welcome!'
    })
}

メニューバー

var menubar = app.createMenu([{
    label:'File',
    submenu:[{
        label:'New',
        action: function() {
            // Simply window.reload() or windows.frame.reload()?    
            // Reload window
        }
    },{
        label:'Change something in view...',
        action: function() {
            // How to speak to client from here?
            // I cannot use socket.emit()
        }
    }, {
        label:'Exit',
        action: function() {
            window.close()
        }
    }]
}])

しかし、ユーザーがメニューバーの項目をクリックしたことをクライアントに伝えるにはどうすればよいでしょうか?

非同期ロング関数 -> ソケット

ソケットを使用するもう 1 つの問題は、非同期の長い読み込み関数です。

ソケット接続

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    var test = veryLongLoading()
    console.log(test) // undefined -.-'
    socket.emit('test', {
        test: test

    })
}

したがって、次のようなコールバックを使用する必要があると考えました。

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    veryLongLoading(returnValue)
}

function veryLongLoadingFunction(next) {
    // Blablabla
    next('test')
}

function returnValue(value) {
    // Again socket is not available -.-'
    socket.emit('test', {
        test: test
    })
}

同じ問題に直面した人、または私を正しい方向に向けることができる人。

多分私は流れを誤解しているだけです(私は通常PHPでプログラムしています)

4

1 に答える 1

0

問題1

最初の部分では、サーバーからのイベントをリッスンする必要があります。

socket.on('message-from-server', function(data) {
  // You need to trigger the sub-menu change here.
  // Which means you need a handle for the sub-menu object.
  subMenu.action(data)
});

問題 2

長時間実行される非同期関数のパターンは次のようになります。

var veryLongLoading = function(next) {
   // pass your value to next
   // like this
   next(someValue);
};

それを使用するには、次のようにします。

veryLongLoading(function(someValue) {
   socket.emit(someValue);
});

それが役立つことを願っています!

于 2013-03-29T03:43:32.677 に答える