我使用TinyMCE编辑器并希望将单词计数值分配给一个敲除变量。 设置编辑器是正常的,它显示单词计数值,但我无法理解如何获得实际值。
这是淘汰价值的视图:
<div data-bind="with: SelectedText">
No. of words is: <span data-bind="value: TextWordCount"></span>
</div>
但是如何将它连接到TinyMce字数?
这是一个小提琴:http://jsfiddle.net/ZvKTn/1/
答案 0 :(得分:2)
正如所承诺的,一切都有点晚了,这是我的解决方案。无需重新编写或黑客攻击任何内容。我甚至冒昧地将此要求包含在tinymce-knockout-binding的最新版本中,您可以看到working demo。
简而言之,关键是以下代码段;
'setup': function( editor ) {
editor.on('change keyup nodechange', function( args ) {
var accessor = allBindings.get( 'wysiwygCount' );
if (editor.plugins['wordcount']) {
accessor(editor.plugins['wordcount'].getCount());
}
}
}
答案 1 :(得分:1)
我已经对你的小提琴进行了一些改动,使其成功: http://jsfiddle.net/ZvKTn/3/
首先,
<span data-bind="value: TextWordCount"></span>
必须使用“text”绑定:
<span data-bind="text: TextWordCount"></span>
除此之外,你需要与TinyMCE onKeyUp事件联系,以便在编辑器中输入文本时获得实时更新。
此外,您克隆数据的代码也存在问题。
我将TextWordCount从observable更改为computed:
self.TextWordCount = ko.computed(function() {
// First remove all html tags
var text = self.TextbatchText().replace(/<[^>]*>/g, '');
// Tiny MCE inserts an extra at the end if you "double space" the end of your sentence. This replaces it with a normal space
text = text.replace(/ /g, ' ');
// This merges all spaces and tabs following each other into a single space
text = text.replace(/[\s\t]+/g, ' ');
// This removes spaces and the begin and end of the text
text = text.replace(/^\s*/, '').replace(/\s*$/, '');
// This splits the string into an array of words separated by a space.
return text.split(' ').length;
});