假设我有这门课。
BucketList = new Class({
Implements: [Options, Events],
options: {
items: [],
onItemAddedOrDeleted: null
},
initialize: function(options, init) {
this.setOptions(options);
this.options.onItemAddedOrDeleted();
}
});
我怎样才能让它发挥作用?
new BucketList([], function() {
alert(this.items.length);
});
一旦实例化,new BucketList
应该警告我传入其构造函数的数组的长度。
答案 0 :(得分:4)
这里有几个问题。一个是您正在实施Events
,因此onItemAddedOrDeleted
选项成为Class实例事件(请参阅setOptions的文档)。因此,您无法将onItemAddedOrDeleted
作为普通函数调用,因为它将成为一个事件侦听器,等待您触发“itemAddedOrDeleted”事件。
二,作为选项的一部分传递函数的语法稍微偏离,因为您需要将自定义init函数作为options对象的一部分传递。我稍微重写了你的代码以使用fireEvent
而不是直接调用函数,但是如果你想直接调用它,你可以重命名它以不使用事件语法(即以'on'开头) )。这虽然有效:
BucketList = new Class({
Implements: [Options, Events],
options: {
items: [],
onItemAddedOrDeleted: null
},
initialize: function(options) {
this.setOptions(options);
this.fireEvent('itemAddedOrDeleted');
}
});
new BucketList({items:[],onItemAddedOrDeleted:function() {
alert(this.options.items.length);
}});
请注意,我将作为选项对象的一部分传递给BucketList构造函数的函数包围了。
您可以在不使用Event
语法的情况下执行此操作:
BucketList = new Class({
Implements: [Options, Events],
options: {
items: [],
itemAddedOrDeleted: null
},
initialize: function(options) {
this.setOptions(options);
this.options.itemAddedOrDeleted();
}
});
var x = new BucketList({items:['x'],itemAddedOrDeleted:function() {
alert(this.items.length);
}});