Объекты класса MooTools и «это» - PullRequest
3 голосов
/ 27 января 2010

Допустим, у меня был этот класс.

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 должен предупредить длину массива, переданного в его конструктор.

1 Ответ

4 голосов
/ 27 января 2010

Несколько вопросов здесь. Во-первых, вы реализуете 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);
}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...