2016-04-08 10 views
2

Trumbowygプラグインからvue.jsライブラリにコンポーネントを作成します。私はこの美しいwysiwygエディタで2つの方法のバインディングを追加する必要があります。 buildEditor()メソッドを書き直すには? このメソッドはプライベートです。どのように正しくそれを行うには?javascriptでプライベートメソッドを再定義する方法は?

<script> 
jQuery.trumbowyg = { 
    // options object 
}; 

(function (navigator, window, document, $, undefined) { 

    $.fn.trumbowyg = function (options, params) { 
     // ... code ... 
     $(this).data('trumbowyg', new Trumbowyg(this, options)); 
     // ... code ... 
    }; 

    var Trumbowyg = function (editorElem, o) { 
     var t = this; 
     // ... code ... 
     t.init(); 
    }; 

    Trumbowyg.prototype = { 
     init: function() { 
      var t = this; 

      t.buildEditor(); 
      // ... code ... 
     }, 

     buildEditor: function() { 
      // i need rewrite this method 
     } 
     // code for otner method 

    }; 
})(navigator, window, document, jQuery); 

// ------------------------------------- 
// other file. I want init this plugin 

// here do need to rewrite buildEditor() method? What best way to do this? 

$( '。selector')。trumbowyg();

+1

正しく書き直すとどういう意味ですか?あなたはそれが何をすると思いますか?あなたが求めていることを本当に理解することは本当に難しい。 –

+0

buildEditorメソッドにコードを追加する必要があります。 「正しく」 - ソースファイル(npmモジュール)のコードを変更しないでください.npmパッケージではなく、自分のコードでのみ変更します。 –

答えて

1

このプラグインが 'Trumbowyg'変数を返さない場合、それは不可能です。私はこのプラグインをフォークし、あなたの設定で独自のバージョンを作成することをお勧めします。

+0

ありがとうございます。試してみます。 –

1

ベストあなたは自分でプラグインをフォークする方法ですas Slava answered。しかし、は技術的にはです。あなたはその機能を変更することができます。

クラスを作成するたびに、そのインスタンスには独自のconstructorプロパティがあります。これはクラス関数と同じです。

TrumbowygClass.prototype.buildEditor = function() { 
    // ... 
} 

あなたが必要になることがあります。

$foo.trumbowyg(...) 
var trumbowyg = $foo.data('trumbowyg') 
var TrumbowygClass = trumbowyg.constructor 

は、今、私たちはそのプロトタイプを変更することができます。あなたはTrumbowygのインスタンスへのアクセスを得ることができる場合

だから、あなたは、そのクラスを使用することができます$fooを一時的または未使用の要素にする。それはあなた自身の変更されたバージョンではなく、buildEditor$foo.trumbowyg()を実行するとすぐに)古いものを呼び出すためです。

あなたはプロトタイプの機能を設定した後、あなたが実際の例として、(例えば$('#target')

trumbowygを使用したい要素にそれを実行できます。

(function() { 
 
    window.makeInstance = function() { 
 
    return new HiddenClass() 
 
    } 
 

 
    var HiddenClass = function() { 
 
    this.setGreeting() 
 
    this.showGreeting() 
 
    } 
 

 
    HiddenClass.prototype.setGreeting = function() { 
 
    this.greeting = 'Hello, world!' 
 
    } 
 

 
    HiddenClass.prototype.showGreeting = function() { 
 
    console.log(this.greeting) 
 
    } 
 
})() 
 

 
var myTempInstance = makeInstance() 
 
// Should log 'Hello, world!' 
 

 
var HiddenClass = myTempInstance.constructor 
 
console.log(HiddenClass) // Should be the HiddenClass function 
 

 
// Now we overwrite our function.. 
 
HiddenClass.prototype.setGreeting = function() { 
 
    this.greeting = 'Redefined!' 
 
} 
 

 
var myUsedInstance = makeInstance() 
 
// Should log 'Redefined!', since we redefined setGreeting 
 

 
// And later we can use `myUsedInstance`. 
 
// In this code myTempInstance is like $foo, and myUsedInstance 
 
// is like $('#target').

関連する問題