2013-11-21 3 views
3

Я пытаюсь сделать ractive.js динамически обновлять MathJax.Ractive JS и обновление MathJax с помощью входа LaTeX?

Теперь я знаю, что вы можете вызвать MathJax перезагрузить с:

MathJax.Hub.Queue.Push(["Typeset",MathJax.Hub]); 

Так что я обязан это с наблюдать обратного вызова:

ractive.observe('input', function (input) { 
    ractive.set('output', input * 2); 
    MathJax.Hub.Queue(["Typeset",MathJax.Hub]); 
    }); 

Но когда я пытаюсь оказать MathJax с \begin{equation} {{output}} \end{equation} остается на начальном значении.

testcase

Странно то, что действительно получает начальное значение, просто не обновления.

Любые мысли?

EDIT: Кажется, что добавляет целую кучу вложенных элементов MathJax_MathContainer, по одному для каждого вызова.


JsFiddle demo with Peter Krautzberger's suggestion - до сих пор, кажется, не работает

ответ

3

Дело в том, что MathJax удаляет элементы из DOM так теля Тяговая может больше не обновлять их. Это можно решить, вместо использования MathJax-поиска (например, $$), обертывающего LaTeX в элементе <script type="math/tex; mode=display" id="foo">. Это предотвратит замену, так как MathJax может обрабатывать элемент скрипта внутри.

Теперь вы можете наблюдать переменные и вызвать перерисовку с MathJax.Hub.Queue(["Typeset",MathJax.Hub, "foo"]);

Огромное спасибо Peter Krautzberger за предложение/решения.

+0

Разве вы не столкнулись с трудностями, вложенными в тег скрипта для MathJax в теге скрипта для активных шаблонов? – wrongusername

+0

Я получил Ractive вместо тега 'template', но он все равно не работает, не хотите ли вы опубликовать рабочий код для своего примера? Вот мой нерабочий код: https://jsfiddle.net/qpk70h1t/ – wrongusername

+0

@wrongusername Смотрите мой ответ ниже. :) – Kishor

1

@wrongusername У меня нет опыта работы с Ractive, и я работал только с MathJax около 3 лет назад, но я пробовал Reprocess вместо Typeset, это сработало. Я думаю, вы должны использовать Reprocess, потому что ваш вход изменился. Из documentation, он говорит

Удаляет любые Typeset математику из документа или DOM элемента (или элементов, если это массив элементов), а затем снова обрабатывает математику, повторно верстки все.

См. Обновленный JSFiddle здесь.

Вам просто нужно заменить

MathJax.Hub.Queue(["Typeset", MathJax.Hub, "foo"]); 

с

MathJax.Hub.Queue(["Reprocess", MathJax.Hub, "foo"]); 

Надеется, что это помогает.

+1

Woohoo, спасибо! – wrongusername

Смежные вопросы