我正在研究延期和自定义事件。我不确定哪种方法适合我的申请。
我有一个叫另一个班级的班级。在这个类中,用户可以将文件拖到窗口上。
拖动文件后,我希望将有关文件的详细信息发送到我的主类。
我已经考虑过使用延迟,但是用户需要反复拖动文件,据我所知,这只能使用一次。
所以在我的主要课程中我:
this.dropBox = new DropBox();
然后在DropBox类中我有:
$(window).on('drop', this.drop);
但是我应该把什么放在我的'' drop'方法。每当有什么东西被丢弃,我都希望提醒他们。我的主要课程,并采取行动。我怎么能听#39;为了这个活动。我应该使用延期的自定义事件还是别的什么?
答案 0 :(得分:0)
为什么不直接回复DropBox?
好吧,就像主类中的这段代码一样:
this.dropBox = new DropBox(function(fileInfo) {
// this code can be executed by the DropBox Object multiple times!
});
DropBox:
window.DropBox = function(callback) {
this.userHasDroppedFiles = function(fileinfo) {
// do stuff
callback(fileinfo); // give the fileinfo back with the callback!
}
}
此外,JavaScript中没有类!你只有对象,你可以使用与原型相结合的构造函数来生成类似行为的类,但你实际上永远不会有类似Java,C#或类似语言的类。始终牢记这一点。 一些JS框架在主要的JS可能性之上构建自己的类层,然后你可能拥有Framework类,但从不 本机 JavaScript类,因为原生的JavaScript类不存在!
答案 1 :(得分:0)
通常有两种选择:
委托应该实现某个"接口",这是一组处理某些事件的函数。
function DropBox(delegate)
{
this.delegate = delegate;
$(window).on('drop', $.proxy(this, 'drop'));
}
DropBox.prototype.drop = function(e) {
// do stuff with event
this.delegate.drop(e);
}
// inside main instance
this.dropBox = new DropBox(this);
// delegate interface
this.drop = function(e) {
// handle file drop
};
如果委托只需要一个功能,你也可以使用回调:
function DropBox(dropEventHandler)
{
this.dropEventHandler = dropEventHandler;
$(window).on('drop', this.drop);
}
DropBox.prototype.drop = function(e) {
this.dropEventHandler(e);
};
// inside main instance
var self = this;
this.dropBox = new DropBox(function(e) {
// handle file drop
// use 'self' to reference this instance
});