Tag: javascript events

骨干点击事件突破

我使用Node作为后端在Backbone中构build应用程序。 作为应用程序的一部分,我正在处理我的视图上的点击事件。 一个例子是这样的: window.MyView = Backbone.View.extend({ tagName: 'section', className: 'calls', events: { 'click a.first': 'gotoFirst', 'click a.prev': 'gotoPrev', 'click a.next': 'gotoNext', 'click a.last': 'gotoLast', 'click a.page': 'gotoPage' }, 当我第一次加载视图,并点击一切正常工作(点击事件得到正常处理)。 但是,如果我导航到新视图,然后返回到第一个视图,则单击事件将被中断。 通过导航到新的视图,我的意思是我做了这样的事情: $container.empty(); $container.append(window.myNewView.render().el); 然后我回去这样回去: $container.empty(); $container.append(window.myView.render().el); 但是当我放弃这个观点时,我的点击事件就被打破了。 我怎样才能解决这个问题? 提前致谢!

Node.JS:forEach vs for循环asynchronous性质

for(var i=0;i<50;i++) { functionWrappingAsycfuncs(i) } var nums = [0,1…50] nums.forEach(functionWrappingAsyncfuns) functionWrappingAsycfuncs(i){ readFileAsync(i,function(){ console.log(i); }); } 在上面的函数中,在for循环中运行它的预期性质是50 50次? 但随着forEach它logging1 2 3 …. 这两个实现看起来都一样,但是确实有不同的任务第一个函数调用所有asynchronous函数,0到50作为参数,但并不等待callback完成 但第二个(在我的项目之一)似乎等待callback,并继续在数组中的下一个项目? 他们都一样吗?

为什么io不确定?

我有一个快速的应用程序使用socket.io。 我不清楚客户开始需要什么,所以如果有人能告诉我怎么做,我会很感激。 另外,我不确定我的客户端代码是否正确。 这是我的客户端套接字代码: var socket = io.connect('http://localhost:3000'); var tView = new totalViewModel(); socket.on('connect', function (data) { function loggedIn(e) { e.preventDefault(); var logged = { username: document.getElementById('pEmail'), password: document.getElementById('pWord') }; socket.emit('login', JSONout(logged)); } socket.on('uploadList', function (data) { tView.setNum(JSONin(data).total); ko.applyBindings(tView); }); function logPurchase(e) { e.preventDefault(); var purchObj = { price: document.getElementById('pPrice').value, priceName: document.getElementById('pName').value, entryDate: new Date() […]

NodeJS嵌套事件侦听器

我不明白,为什么通过嵌套事件监听器传递所有值的事件发射器的参数? 是因为它必须通过上层的“join”监听器吗? variables信息是否存储在某个地方? var events = require('events'); var net = require('net'); var channel = new events.EventEmitter(); var i = 0; var subscriptions; // IF we have two connections channel.on('join', function(subs) { // Upper Listener console.log(subs); // -> output 0 when first client joined and 1 for second channel.on('broadcast', function(subs2) { // lower listener console.log(subs); // […]

处理节点js和socket io的响应

我有一个最初由HTTP服务的网页的情况。 点击提交后,它会发送一些数据到服务器,并做很less的Web服务,这将需要很长的时间。 我需要快速显示响应页面,完成Web服务工作后,必须在以前加载的同一页面中显示结果。 这将可能通过处理所有的http处理请求,然后通过socket io传递结果。 我希望编写一些类似的代码。 var httpd = require('http').createServer(handler); var io = require('socket.io').listen(httpd); var fs = require('fs'); httpd.listen(4000); function handler(req, res) { fs.readFile(__dirname + '/index.html', function(err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); } ); } io.sockets.on('connection', function (socket) { socket.on('clientMessage', function(content) { setTimeout(function () { socket.emit('serverMessage', "web […]

删除node.js事件,听众也消失了?

如果我删除了一个node.js事件,那么听众就会离开了吗? 我不需要删除其他东西?

附加一个事件监听器到一个类来监听来自其成员的事件

我有2个类:EventEmitter和EventCatcher。 EventCatcher有2个EventEmitter成员。 EventEmitter发出一个testing事件。 在捕手,我想抓住所有的testing事件,并做一些事情: EventEmitter var events = require('events'); var sys = require('util'); module.exports = eventEmit; function eventEmit(name) { this.name = name; events.EventEmitter.call(this); } sys.inherits(eventEmit, events.EventEmitter); eventEmit.prototype.emitTest = function() { var self = this; self.emit('test'); } EventCatcher var eventEmit = require('./eventEmit'); module.exports = eventCatch; function eventCatch() { this.eventEmitA = new eventEmit("a"); this.eventEmitB = new eventEmit("b"); […]

AppJS拖放事件永远不会被触发

使用基本上给NodeJS一个webkit窗口的AppJS( http://appjs.org/ )。 我试图利用拖放事件的文件和URL在我的代码中使用。 拖放的简短代码可以在这里find: https : //github.com/appjs/appjs/wiki/HTML5 : -Drag-&- Drop- from-Desktop 我用来创build窗口的代码: var app_window = appjs.createWindow({ width : 200, height : 200, showChrome : true, //display as standard os window with max/min/close buttons alpha: false, autoResize: true, //adjust window size automatically according to content. resizable: true, //allow user resize of window margin: 0, disableSecurity:true, […]

统一事件和承诺是JS /节点

我试图理解使用事件(即Node的EventEmitter)和承诺在同一个系统中的最佳方式。 我喜欢松散地通过某种中央事件中心进行通信的解耦组件的想法。 当一个组件有一些可能与另一个组件相关的信息时,它可以在集线器上发送它。 生成信息的组件需要对消耗信息的组件一无所知。 但有时候,交互更多的是一个请求/响应行为,而这个行为对于这个承诺看起来更加理想。 我想知道是否有办法统一这些沟通方式。 例如,我可以有一个组件,有一个encryption的消息,并需要解密。 我想要一个松散耦合的组件之间的东西与消息和组件处理消息解密。 使用promise可以为请求/响应提供良好的交互,但是代表紧密的耦合。 例如: message = … some encrypted message … decrypting_lib.decrypt(message).then(function(decrypted_message) { … do something with decrypted_message … }) 但是正如你所看到的,我通过引用解密库有一个紧密的耦合。 有了事件,我可以删除这个耦合,但代码似乎更加尴尬: message = … some encrypted message … callback = function(decrypted_message) { if( message.id != decrypted_message.id ) return; hub.removeListener('message:decrypted', callback); … do something with decrypted_message … } hub.on('message:decrypted', […]

同步事件解复用如何解决忙碌的等待?

我想了解如何同步事件解复用是一个忙碌的等待解决scheme。 假设有3个IO操作,并且我们有一个不断循环的代码来检查3个操作中的任何一个是否有可读取的数据。 arry = [event1 , event2 , event3] while(arry is not empty) { for(i = 0 ; i <= 2 ; i++) { if(arry[i] has something to read) { read data; } else { continue to next i; } if(arry[i] read has finished){ remove i from arry } } } 上面的伪代码忙于等待。 现在在同步事件解复用或者说反应器模式时,事件监听器就会在事件发生时响应。 但是,一个事件监听器如何在不忙着等待的情况下这样做?