Sproutcore 2-Методы и переменные класса


Я реализовал методы класса, как показано в этом ответе

Basic Sproutcore: метод класса, переменные класса help

Но он больше не работает в Sproutcore 2: -

MyFooClass.mixin({
    barClassMethod: function() {
        /* ... */
    }
})

Дает ошибку

MyFooClass.mixin [неопределенный] не является функция

Я пробовал читать через источник Sproutcore и не смог действительно идентифицировать какие-либо методы класса или переменные, что очень удивило меня.

Может быть, я просто делаю это. неправильно?

2 3

2 ответа:

При расширении класса sproutcore следует иметь в виду две вещи.

Сначала вы должны определить свой класс, прежде чем вы сможете что-то в него добавить. Поэтому начните с создания класса / объекта либо с

MyFooClass = SC.Object.extend({ ... });

Или

MyFooClass = SC.Object.create({ ... });

Тогда как первое утверждение создает класс, а второе-конкретную реализацию класса (говоря в объектно-ориентированной терминологии-объект). Обычно, если вы используете SC.Объект.create() цель состоит в том, чтобы создать синглтон-объект, в противном случае определение класса с SC.Объект.extend() и использовать определенный класс для создания объектов определенного класса с помощью

myFooObject = MyFooClass.create();
Поэтому убедитесь, что ваш класс или объект, который вы хотите смешать с методами, определен первым и уже находится в области действия, когда вы хотите его использовать. Во-вторых, если вы хотите добавить дополнительные методы или свойства в уже существующий класс или объект, используйте SC.смешивание следующим образом
SC.mixin(MyFooClass, {
    yourMixedInMethod: function() {
        console.log('mixed in method called');
    }
});

Вы можете делать это и с объектами, но помните, что только данный объект получает метод mixed in и не все экземпляры класса. Если вы хотите, чтобы все экземпляры получили дополнительную функциональность, вы должны добавить ее в определение класса.

Я думаю, что вы ищете

MyFooClass.reopenClass