2014-09-30 11 views
5

już wcześniej odkrył, że możliwe jest rozszerzenie wstawek podczas tworzenia nowego wstawek takich jak:Jak można by przedłużyć wiele wstawek podczas tworzenia nowego wstawek w ember.js

App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixin, { 
    someMethod: function() { return true; } 
}); 

Teraz jestem próbuje użyć dwóch istniejące mixiny, ale wydaje się, że Mixin.create obsługuje tylko 2 parametry.

App.SomeNewMixin = Ember.Mixin.create(App.SomeOldMixinOne, App.SomeOldMixinTwo, { 
    someMethod: function() { // No access to methods defined in SomeOldMixinOne } 
}); 

To wydaje się poważnym ograniczeniem Ember Mixins. Dokumenty Ember mają niewiele do omówienia Ember.Mixin, więc nie jestem pewien, jak postępować. Próbowałem używać Ember.Mixin.apply w funkcji init SomeNewMixin, również bez skutku.

App.SomeNewMixin = Ember.Mixin.create({ 
    init: function() { 
    this._super(); 
    this.apply(App.SomeOldMixinOne); 
    this.apply(App.SomeOldMixinTwo); 
    } 

    someMethod: function() { return true; } 
}); 

Każdy wgląd na możliwe rozwiązania byłby bardzo ceniony!

Odpowiedz

8

Tworzenie mixin, który rozszerza wiele innych mixinów, powinno działać dobrze.

Na przykład spojrzeć na to:

var App = Ember.Application.create(); 

App.SomeOldMixin = Ember.Mixin.create({ 
    someOldMethod: function() { return 'old'; }, 
    someOldMethod2: function() { return 'old2'; } 
}); 

App.SomeNewMixin = Ember.Mixin.create({ 
    someNewMethod: function() { return 'new'; } 
}); 

App.SomeNewerMixin = Ember.Mixin.create({ 
    someNewerMethod: function() { return 'newer'; } 
}); 

App.SomeNewestMixin = Ember.Mixin.create(App.SomeOldMixin, App.SomeNewMixin, App.SomeNewerMixin, { 
    someOldMethod: function() { 
    return this._super() + ' ' + this.someOldMethod2(); 
    }, 
    someNewestMethod: function() { return 'newest'; } 
}); 

App.ApplicationController = Ember.Controller.extend(App.SomeNewestMixin, { 
    test: function() { 
    console.log(this.someOldMethod()); 
    console.log(this.someNewMethod()); 
    console.log(this.someNewerMethod()); 
    console.log(this.someNewestMethod()); 
    }.on('init') 
}); 
+0

JSBin jest nieaktualna, mógłbyś dodać fragment do swojej odpowiedzi? Dziękuję Ci! –

Powiązane problemy