【问题标题】:Knockout.js template binding - call a function of tinyMCE to load previewKnockout.js 模板绑定——调用 tinyMCE 的函数加载预览
【发布时间】:2016-09-12 06:43:37
【问题描述】:

我正在使用 KO.JS 并构建一个 html 模板。

我想通过在 html 绑定中调用它的预览命令来显示 TinyMCE 预览。

一般来说,这是我们在单击外部按钮时呈现 tinymce 预览的方式:

var preview = function (divName) {
var ID = divName 
    var myEditor = tinyMCE.editors["divName"];
    myEditor.execCommand("mcePreview");
}

注意:我有多个带有 TinyMCE RTE 的 DIV,因此将 divName 作为参数传递。

我的问题领域:

我想使用上述函数在 DIV 中呈现预览。 我试图在我的模板脚本中调用相同的命令。

下面是我的模板代码:

<script type="text/html" id="tmplPreviewModal">

// Lots of other bindings go here //

// Below code should bind Tiny MCE RTE Preview to our DIV // 

<div data-bind="html : {'tinymce.get('id': 'myTxtArea').execCommand('mcePreview'); '} "></div>

 </script>

此代码不起作用,还会引发错误,如下图所示:

难道不能在模板绑定中编写我的 JS 代码吗?

我什至尝试调用JS函数preview,如下所示:

请推荐

【问题讨论】:

  • 从第二个红色矩形中删除 '
  • 这也是抛出错误

标签: jquery knockout.js tinymce preview knockout-templating


【解决方案1】:

您可以像 jquery 插件一样使用 viewmodel 的 init 函数:

var ViewModel = function() {
    var self = this;
    //blah
    self.init = function() {
        tinyMCE.init({
            setup: function(ed) {
                ed.onChange.add(function(ed, l) {
                    self.preview(tinymce.get('id': 'myTxtArea').getContent());
                });
            };
        });
    };
    self.preview = ko.observable();
};


var vm = new ViewModel();
ko.applyBindings(vm);
vm.init();
<div data-bind="html : preview "></div>

How to use jQuery in a Knockout.js Template?

或者你可以使用插件 tinymce-knockout-binding

https://github.com/michaelpapworth/tinymce-knockout-binding

【讨论】:

  • 如果我使用init函数,你能告诉我如何将值绑定到div吗?例如这里的 html 绑定:
  • 我已经改变了我的答案,你想获取 html 并在 DIV 中设置?显示预览?
  • 是的,我在 KO.JS 中创建了一个模板。此模板将呈现预览。它将包含许多 TinyMCE RTE 以及一些其他信息,例如下拉选择的值、标题等。我可以从我的视图模型中显示除 TinyMCE RTE 预览之外的所有内容。
【解决方案2】:

"html : {'tinymce.get('id': 'myTxtArea').execCommand('mcePreview'); '} " 是句法废话。右边应该是一个字符串值,但它有花括号,就像它是一个哈希一样,但它不是一个键,而是一个字符串,它包含一个本身有单引号的函数调用。

我最简单的猜测是花括号,最外面的单引号和分号不属于,(更新:冒号也应该是逗号)所以你想要

"html : tinymce.get('id', 'myTxtArea').execCommand('mcePreview')"

如果 execCommand 的结果是一个 HTML 字符串,那是正确的。但我怀疑 TinyMCE Preview 本身想要操纵 DOM,这意味着您需要为其自定义绑定处理程序。

【讨论】:

  • 感谢您在这里纠正我。我已经使用了您建议的声明。仍然收到错误:未捕获的 SyntaxError:无法处理绑定“模板:函数(){return {名称:'tmplPreviewModal'}}”消息:无法解析绑定。绑定值: html : tinymce.get('id': 'myTxtArea').execCommand('mcePreview')
  • 忘记了 get() 调用中的冒号。应该是逗号吗?
猜你喜欢
相关资源
最近更新 更多
热门标签