从班级发送数据?

时间:2014-06-05 09:25:14

标签: javascript jquery

我正在研究延期和自定义事件。我不确定哪种方法适合我的申请。

我有一个叫另一个班级的班级。在这个类中,用户可以将文件拖到窗口上。

拖动文件后,我希望将有关文件的详细信息发送到我的主类。

我已经考虑过使用延迟,但是用户需要反复拖动文件,据我所知,这只能使用一次。

所以在我的主要课程中我:

this.dropBox = new DropBox();

然后在DropBox类中我有:

$(window).on('drop', this.drop);

但是我应该把什么放在我的'' drop'方法。每当有什么东西被丢弃,我都希望提醒他们。我的主要课程,并采取行动。我怎么能听#39;为了这个活动。我应该使用延期的自定义事件还是别的什么?

2 个答案:

答案 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
});