: 객체 지향 프로그래밍 언어에서
는 믹스 인은 다른 클래스의 방법의 조합을 포함하는 클래스입니다. 그러한 의 조합은 언어에 따라 다르지만, 상속에 의한 것이 아닙니다. 조합에 결합 된 클래스의 모든 메소드가 포함되어 있으면 다중 상속과 동일한 입니다. 객체의 인스턴스에 엠버
는 인수없이
create
방법으로 생성하거나 하나의 해시 유형의 속성을 나타낸다 (KVO)와, 그들은 자동적으로 채워질 것이다된다. 예 : 한편
var SomeClass = Ember.Object.extend({
name: '',
url: ''
});
// this instance will have a "name" and a "url" properties with blank values
var someInstance = SomeClass.create();
// this instance will have the same properties, but now
// their values will be populated
var anotherInstance = SomeClass.create({
name: 'Ember.js',
url: 'http://emberjs.com'
})
, crateWithMixins
는 하나의 개체 인스턴스로 또는 다른 클래스로 혼합 다른 클래스 정의를 할 수 있습니다. 위에서 같은 SomeClass
을 가지고 있다고 가정 해 보겠습니다. 그러나 extend
을 통해 하위 클래스로 분류하고 다른 유형을 생성하고 싶지는 않습니다. 이 경우 Mixin
을 사용하여 하나의 인스턴스에만 두 클래스의 해당 정의가 있음을 확인할 수 있습니다. 예 : 당신이 첫 번째 인수로 Mixin
을 통과하는 Mixin
, 당신이 할 수있는 extend
Em.Object
으로 새로운 클래스를 만들려면
var SomeClass = Ember.Object.extend({
name: '',
url: ''
});
// note that you don't extend a mixin, you only create
var SomeOtherClass = Ember.Mixin.create({
doSomething: function() {
console.log('doing my thing');
}
});
// This instance will have a method called "doSomething"
var x = SomeClass.createWithMixins(SomeOtherClass, {
name: 'Ember.js',
url: 'http://emberjs.com'
});
// this instance only has methods/properties defined in "SomeClass"
// therefore, no method called "doSomething"
var y = SomeClass.create({
name: 'Google',
url: 'http://google.ca'
});
그러나, 다음과 같이
var AnotherClass = Ember.Object.extend(SomeOtherClass, {
firstName: '',
lastName: ''
});
var z = AnotherClass.create();
z.set('firstName', 'Hiro');
z.set('lastName', 'Nakamura');
z.doSomething();
체크 아웃 API Documentation 이 JSFiddle도 마찬가지입니다.
편집 : _super()
에 관해서는 당신이 (extend
를 통해) 새로운 클래스를 만들 때, 당신 만이 사용합니다. 기존 클래스의 create
인스턴스 인 경우 _super()
으로 전화하지 않아야합니다.
또 하나. create
에 View
을 직접 보려고합니다. 나는 당신의 코드를 기반으로, 당신은 Ember.View
을 확장하고 프레임 워크가 적절한 시간에 당신을 위해 인스턴스를 만들어야한다고 믿는다. 수동으로 생성하는 경우 워크 플로의 일부를 DOM에 추가하거나 제거하는 등의 작업을 담당하게됩니다.어쩌면 내가 전체 그림을 볼 수 없지만, 혼자 코드를 기반으로, 나는 당신이 대신 extend
을하지이 전화 create
및 전화를해야한다고 생각하고 당신이 _super()
@Joe, 감사 a를 호출 할 수 있습니다 이 정교한 설명을위한 많은. 그것은 정말로 나를 위해 매우 도움이되었다. 인스턴스 생성 중에 .super()를 사용하지 않아야한다면, 축소 된 버전을 사용하면 ember가 오류를 발생시키지 않는 이유는 무엇입니까? – phkavitha
확신 할 수는 없지만 축소 된 버전에서는 몇 가지 단정을 제거 할 수 있습니다. 일반적으로 디버그/개발 버전에는 제품을 사용하기 위해 잠재적 인 문제를 식별하는 데 도움이되는 모든 어설 션이 있으므로 테스트를 완료했다고 가정합니다. – MilkyWayJoe