2016-07-14 9 views
1

私は "this"キーワードを使用し、メソッドではなくクラス自身を意味するので、メソッドの代わりにクラス内で矢印関数を使用します。子クラスのオーバーライドアロー関数

私は、子クラスによってオーバーライドされる空の矢印関数を定義する抽象クラスを持っています。修正、それはもともと、このでした:

abstract _configureMultiselect(): void; 

が、矢印の機能とそれを上書きしようとしているが、これを引き起こした:

Class 'CategorySelect' defines instance member function '_configureMultiselect', but extended class 'SearchFilterCategorySelect' defines it as instance member property. 
(property) Select.SearchFilterCategorySelect._configureMultiselect:() => void 

だから私は親クラスの空の矢印機能にそれを変更:

_configureMultiselect =() => {}; 

しかし、私はそれを上書きしようとすると、それだけでそれをオーバーライドしないので、私は明らかにそれが機能を持つことを望むとき、子クラスの私の_configureMultiselectは空です。ここに私のコードは次のとおりです。

interface ICategorySelect { 
     multiselectConfiguration: Object; 
     numberOfCategories: KnockoutObservable<number>; 
     allSelected: KnockoutObservable<boolean>; 
     selectedCategories: KnockoutObservableArray<Category>; 
     categories: KnockoutObservableArray<Category>; 
    } 

    abstract class CategorySelect implements ICategorySelect { 
     multiselectConfiguration: Object; 
     numberOfCategories: KnockoutObservable<number>; 
     allSelected: KnockoutObservable<boolean>; 
     selectedCategories: KnockoutObservableArray<Category>; 
     categories: KnockoutObservableArray<Category>; 

     constructor() { 
      this._configureMultiselect(); 
      this._instantiateCategories(); 
      this.numberOfCategories = ko.observable(7); 
      this.allSelected = ko.observable(false); 
     } 

     _configureMultiselect =() => {}; 

     _instantiateCategories =() => { 
      this.categories = ko.observableArray([ 
       new Category("Meat", 1), 
       new Category("Dairy", 2), 
       new Category("Confectionary", 3), 
       new Category("Dessert", 4), 
       new Category("Baking", 7), 
       new Category("Grocers", 6), 
       new Category("Restaurants", 5), 
       new Category("Condiments", 8), 
       new Category("beverages", 9), 
      ]); 
     } 
    } 

    export class SearchFilterCategorySelect extends CategorySelect { 

     constructor() { 
      super(); 
     } 

     _configureMultiselect =() => { 
      this.multiselectConfiguration = { 
       buttonWidth: '100%', 
       buttonContainer: '<div style="height: 64px;" />', 
       buttonClass: 'none', 
       nonSelectedText: "select categories", 
       nSelectedText: ' thingymajigs', 
       allSelectedText: "all of the things!!", 
       selectAllNumber: false, 
       includeSelectAllOption: true, 
       disableIfEmpty: true, 
       onSelectAll:() => { 
        this.allSelected(true); 
       }, 
       onInitialized:() => { 

       }, 
       onChange: (option, checked) => { 
        this.selectedCategories = ko.observableArray([]); 
        var self = this; 

        $('#category-select option:selected').each(function() { 
         self.selectedCategories.push(
          <Category>($(this).text(), $(this).val()) 
         ) 
        }); 
        console.log(this.selectedCategories()); 
        if(this.selectedCategories().length < this.numberOfCategories()) { 
         this.allSelected(false); 
        } 
       } 
      }; 
     } 
    } 

どのように私は正常に子クラスで_configureMultiselectをオーバーライドしていますか?

答えて

0

私はsuperConfigureMultiselectとして新しいメンバーに子クラスに成功

ストアそれに_configureMultiselectを無効にし、その後に使用するにはどうすればよいです。

もっと

アロー機能の継承はここに覆われている:https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html#tip-arrow-functions-and-inheritance

+0

これを動作させることはできません。私のコードに適用されたコード例をお願いしますか?私のコードはあなたの答えのリンクと同じではないので、実際には適用されません。リンクでは、親メソッドに実装があります – BeniaminoBaggins

0

私はまだ親に空の矢印機能を持っており、子供にそれを上書きする方法がわかりません。

私のシナリオでは、機能を完全に削除することができました。それは余計でした。私はmultiselectConfiguration: Object;プロパティをオーバーライドするだけでした。

関連する問題