Несколько вопросов здесь. Во-первых, вы реализуете Events
, поэтому опция onItemAddedOrDeleted
становится событием экземпляра класса (см. Документацию для setOptions ). В результате вы не можете вызвать onItemAddedOrDeleted
как обычную функцию, так как она становится прослушивателем событий, ожидающим, пока вы не вызовете событие «itemAddedOrDeleted».
Во-вторых, ваш синтаксис для передачи функции как части параметров немного отключен, так как вам нужно передать пользовательскую функцию init как часть объекта параметров. Я немного переработал ваш код, чтобы использовать 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);
}});