2016-09-12 2 views
0

J'utilise KO.JS et la construction d'un modèle HTML.Knockout.js liaison de modèle - appelez une fonction de tinyMCE pour charger l'aperçu

Je souhaite afficher TinyMCE Preview en appelant sa commande preview dans la liaison html.

En général, c'est la façon dont nous rendions l'aperçu pour tinymce sur un bouton externe clic:

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

Note: J'ai plusieurs DIVs avec le TinyMCE RTE, en passant donc divName comme paramètre.

Mon problème Superficie:

Je veux rendre l'aperçu dans un DIV en utilisant la fonction ci-dessus. J'essaye d'appeler la même commande dans mon Template Template.

Ci-dessous est mon code de modèle:

<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> 

Ce travail ne marche pas de code, jette également l'erreur comme indiqué dans ci-dessous capture d'écran:

enter image description here

est-il pas possible d'écrire mon code JS dans les la liaison de modèle?

J'ai même essayé d'appeler la fonction JS preview comme indiqué ci-dessous:

enter image description here

S'il vous plaît suggérer

+0

supprimer le 'de la deuxième rouge rectangulaire – madalinivascu

+0

Ceci est également l'erreur de lancement – user2598808

+0

S'il vous plaît suggérer! – user2598808

Répondre

0

Vous pouvez utiliser la fonction d'initialisation de votre viewmodel comme plugin 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?

Ou vous pouvez utiliser le plugin tinymce knock-out contraignant

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

+0

Si j'utilise la fonction init, pouvez-vous me dire comment lier la valeur à la div?Par exemple ici dans la liaison html:

+0

J'ai changé ma réponse, vous voulez obtenir le code HTML et définir dans DIV? Pour afficher l'aperçu? – ArDumez

+0

Oui, j'ai créé un modèle dans KO.JS. Ce modèle rendra un aperçu. Il contiendra de nombreux RTEs TinyMCE et aussi d'autres informations telles que les valeurs sélectionnées, les titres, etc. Je peux tout afficher à partir de mon modèle de vue sauf TinyMCE RTE Preview. – user2598808

0

"html : {'tinymce.get('id': 'myTxtArea').execCommand('mcePreview'); '} " est un non-sens syntaxique. Le côté droit devrait être une valeur de chaîne, mais il a des curlies comme si c'était un hachage, mais au lieu d'une clé, il a une chaîne qui encapsule un appel de fonction qui lui-même a des guillemets simples.

Ma conjecture la plus simple est que les Curlies, les apostrophes plus à l'extérieur, et le point-virgule ne font pas partie, (mise à jour: aussi le côlon doit être une virgule) si vous voulez

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

C'est corrigez si le résultat de cette execCommand est une chaîne HTML. Mais je soupçonne que TinyMCE Preview lui-même veut manipuler le DOM, ce qui signifie que vous avez besoin d'un gestionnaire de liaison personnalisé pour cela.

+0

Merci de me corriger ici. J'ai utilisé la déclaration que vous avez suggérée. Toujours une erreur: uncaught SyntaxError: Impossible de traiter la liaison "template: function() {return {name: 'tmplPreviewModal'}}" Message: Impossible d'analyser les liaisons. Valeur des liaisons: html: tinymce.get ('id': 'myTxtArea'). ExecCommand ('mcePreview') – user2598808

+0

Vous avez oublié le deux-points dans l'appel 'get()'. Est-ce censé être une virgule? –