Sproutcore 2 - методы и переменные класса - PullRequest
3 голосов
/ 02 июня 2011

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

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

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

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

выдает ошибку

MyFooClass.mixin [undefined] не является функция

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

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

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

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

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

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

или

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

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

myFooObject = MyFooClass.create();

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

Во-вторых, если вы хотите смешать дополнительные методы илиСвойства в существующем классе или объекте используют SC.mixin следующим образом:

SC.mixin(MyFooClass, {
    yourMixedInMethod: function() {
        console.log('mixed in method called');
    }
});

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

1 голос
/ 11 августа 2011

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

MyFooClass.reopenClass
...