Базовый Sproutcore: метод класса, справка по переменным класса

Вот как я определяю простой класс с переменными экземпляра и методами экземпляра.

ExampleClass = SC.Object.extend({
    foo:undefined,
    bar: function() {
        this.foo = "Hello world";
        console.log( this.foo );
    }
}

// test
var testInstance = ExampleClass.create();
testInstance.bar();    // outputs 'Hello world'

Может ли кто-нибудь помочь мне с аналогичным примером переменной класса (или аналогичного поведения) и метода класса?

Спасибо


person hooleyhoop    schedule 24.02.2011    source источник


Ответы (1)


Метод/свойство класса будет выглядеть следующим образом:

ExampleClass = SC.Object.extend({
  foo:undefined,
  bar: function() {
    this.foo = "Hello world";
    console.log( this.foo );
  }
}

ExampleClass.mixin({
  classFoo: "foo",
  classBar: function() {
    return "Bar";
  }
})

Затем вы можете получить к нему доступ, например:

ExampleClass.classFoo

Но не забывайте, что при доступе к свойству (или вычисляемому свойству) экземпляра вам нужно использовать .get(), например:

var example = ExampleClass.create();
// Good
example.get('foo');
example.set('foo', 'baz');

// BAD!! Don't do this, or Bindings/ Observes won't work.
example.foo; 
example.foo = 'baz';
person geoffreyd    schedule 25.02.2011
comment
Спасибо, как раз то, что я искал. Дерзкий вопрос: знаете ли вы, возможно ли иметь собственный геттер или сеттер, учитывая, что один метод доступа (get() или set()) используется для всех свойств? - person hooleyhoop; 25.02.2011
comment
Да, это еще одна важная причина, по которой у нас есть get/set. Посмотрите здесь: guides.sproutcore.com/core_concepts.html#computed-properties - person geoffreyd; 26.02.2011
comment
Мне не было ясно, будет ли это работать - я думаю, что одна функция доступа, которая действует как геттер и сеттер в зависимости от контекста вызова, бросила меня, но она отлично работает. Спасибо за вашу помощь. - person hooleyhoop; 06.04.2011