2016-09-12 4 views
0

Я использую KO.JS и создаю html-шаблон.Knockout.js привязка шаблона - вызов функции tinyMCE для загрузки предварительного просмотра

Я хочу показать TinyMCE Preview, вызвав команду предварительного просмотра в привязке html.

В общем, это то, как мы предоставляем предварительный просмотр для TinyMCE на кнопку внешней мыши:

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

Примечание: У меня есть несколько DIVs с TinyMCE RTE, поэтому прохождение 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> 

Этот код не работает, также бросает ошибку, как показано на скриншоте ниже:

enter image description here

Разве это не возможно, чтобы написать мой JS код в привязка шаблона?

Я даже пытался вызова JS функции preview, как показано ниже:

enter image description here

Пожалуйста, предложите

+0

удалить 'со второго красного прямоугольника – madalinivascu

+0

Это также ошибка бросания – user2598808

+0

Пожалуйста, предложите! – user2598808

ответ

0

Вы можете использовать функцию инициализации вашей ViewModel как JQuery плагин:

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-нокаут-связывающий

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

+0

Если я использую функцию init, можете ли вы рассказать мне, как связать значение с div?Для ex здесь в html binding:

+0

Я изменил свой ответ, вы хотите получить html и установить в DIV? Для просмотра предварительного просмотра? – ArDumez

+0

Да, я создал шаблон в KO.JS. Этот шаблон сделает предварительный просмотр. Он будет содержать множество TinyMCE RTE, а также другую информацию, такую ​​как выпадающие выбранные значения, титры и т. Д. Я могу отображать все из моей модели просмотра, кроме TinyMCE RTE Preview. – user2598808

0

"html : {'tinymce.get('id': 'myTxtArea').execCommand('mcePreview'); '} " является синтаксическим нонсенс. Правая часть должна быть строковым значением, но у нее есть завитки, такие как хеш, но вместо ключа он имеет строку, обертывающую вызов функции, который сам имеет одинарные кавычки.

Моего простейшее предположения, что Curlies, крайние одинарные кавычки, а точка с запятой не принадлежат, (Update: также двоеточие должно быть запятая), так что вы хотите

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

То есть если результат execCommand является строкой HTML. Но я подозреваю, что сам TinyMCE Preview хочет манипулировать DOM, что означало бы, что для него нужен специальный обработчик привязки.

+0

Спасибо, что исправил меня здесь. Я использовал предложенное вами заявление. Все еще получаю сообщение об ошибке: uncaught SyntaxError: не удалось обработать привязку "template: function() {return {name: 'tmplPreviewModal'}}" Сообщение: невозможно разобрать привязки. Значение привязки: html: tinymce.get ('id': 'myTxtArea'). ExecCommand ('mcePreview') – user2598808

+0

Забыл о двоеточии в вызове 'get()'. Это должно быть запятая? –