我从Trumbowyg插件创建组件到vue.js库。我需要在这个漂亮的所见即所得编辑器中添加双向绑定。 如何重写buildEditor()方法? 这种方法是私密的。如何正确地做到这一点?
<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?
$(&#39; .selector&#39)。trumbowyg();
答案 0 :(得分:1)
如果这个插件没有返回&#39; Trumbowyg&#39;变量它是不可能的。我建议使用fork这个插件并使用您的设置创建自己的版本。
答案 1 :(得分:1)
最好的方法是自己分叉插件,as Slava answered。但技术上你能够修改该功能。
每当构造一个类时,该实例都有自己的constructor
属性。这等于类函数。
因此,如果您可以访问Trumbowyg
的实例,则可以使用其类:
$foo.trumbowyg(...)
var trumbowyg = $foo.data('trumbowyg')
var TrumbowygClass = trumbowyg.constructor
现在我们可以修改它的原型:
TrumbowygClass.prototype.buildEditor = function() {
// ...
}
您可能希望$foo
成为临时或未使用的元素。这是因为它会调用旧buildEditor
(只要您运行$foo.trumbowyg()
),而不是您自己的修改版本。
在您设置原型函数后,您可以在实际要使用的元素trumbowyg
上运行它(例如$('#target')
)
举个例子:
(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').
&#13;