淘汰数据绑定中的TinyMCE字数

时间:2013-12-22 11:36:11

标签: javascript jquery knockout.js tinymce

我使用TinyMCE编辑器并希望将单词计数值分配给一个敲除变量。 设置编辑器是正常的,它显示单词计数值,但我无法理解如何获得实际值。

这是淘汰价值的视图:

<div data-bind="with: SelectedText">
    No. of words is: <span data-bind="value: TextWordCount"></span>
</div>

但是如何将它连接到TinyMce字数?

这是一个小提琴:http://jsfiddle.net/ZvKTn/1/

2 个答案:

答案 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 &nbsp; at the end if you "double space" the end of your sentence. This replaces it with a normal space
    text = text.replace(/&nbsp;/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;
});