Sproutcore 2 - 类方法和变量

时间:2011-06-02 12:00:55

标签: sproutcore

我一直在实现这个答案所示的类方法

Basic Sproutcore: class method, class variables help

但它不再适用于Sproutcore 2: -

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

给出错误

  

MyFooClass.mixin [undefined]不是   功能

我试过阅读Sproutcore源代码并且无法真正识别任何Class方法或变量,这让我感到非常惊讶。

也许我只是做错了?

2 个答案:

答案 0 :(得分:2)

扩展sproutcore类时应该记住两件事。

首先,您必须先定义您的课程,然后才能将某些内容混合到其中。首先,使用

创建类/对象
MyFooClass = SC.Object.extend({ ... });

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

而第一个语句将创建一个类,而第二个语句是类的具体实现(在面向对象的术语中称为对象)。通常,如果您正在使用SC.Object.create(),那么目标是创建一个单例对象,否则使用SC.Object.extend()定义您的类,并使用已定义的类创建您定义的类的对象

myFooObject = MyFooClass.create();

因此,请确保首先定义要在方法中混合的类或对象,并且在您想要使用它时已经在范围内。

其次,如果要将其他方法或属性混合到预先存在的类或对象中,请使用SC.mixin,如下所示

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

您也可以使用对象执行此操作,但请注意,只有给定对象获取混合in方法而不是类的所有实例。如果您希望所有实例都获得其他功能,则必须将其混合到类定义中。

答案 1 :(得分:1)

我认为你在寻找

MyFooClass.reopenClass