Внедрение глобального помощника во все шаблоны подчеркивания с помощью Marionette

Изначально это была вторая часть другого вопроса, который я смог выделить в свой собственный вопрос для лучшей индексации поиска. Может быть полезно обратиться к нему для более конкретного контекста.

Мой вопрос: Как элегантно внедрить помощник глобального представления во все шаблоны подчеркивания

Этот вопрос основан непосредственно на документации i18next. В проекте слишком поздно переключаться на шаблоны рулей, но я, безусловно, предпочитаю, как это обрабатывается в стиле registerHelper. При поиске на этой стороне я наткнулся на Мнение Дерика Бейли Вспомогательная статья, которая, как обычно, предлагает очень аккуратное решение неизящной проблемы.

В нашей архитектуре мы решили повторно реализовать serializeData для всех наших представлений и не полагаться на реализацию по умолчанию (экспорт всех атрибутов из модели, с которой связано представление). Я считаю, что если бы я хотел получить что-то близкое к стилю registerHelper, мне пришлось бы расширить базовый класс Marionette.View и предоставить базовый помощник, который внедряется во все представления путем наследования.
Это не так. кажутся даже близкими к чистоте помощников руля, что дает ему вообще работать, что на данный момент кажется ничем иным, как определенным.

Будем очень признательны за любые примеры или подсказки, по какому пути идти для решения этой проблемы.

Спасибо.

[править]

Я нашел решение именно этой проблемы, подробно описанное в моем предыдущем вопросе. Саймон также опубликовал ответ, который, вероятно, тоже сработает.


person Mikechaos    schedule 29.05.2014    source источник
comment
Я не знаком с Marionette, но Lodash (вставная замена Underscore, и в конечном итоге они могут быть объединены) поддерживает это. Например, _.templateSettings.imports = { foo: function () { ... } }; определяет новую функцию foo(), которую можно использовать в любом шаблоне.   -  person Don McCurdy    schedule 09.09.2015


Ответы (1)


Почему бы вам просто не использовать Handlebars с Marionette? Вы можете использовать любую библиотеку шаблонов, которая вам нравится. Ознакомьтесь с этим или напишите собственную интеграцию на основе Marionette документы. Я сделал это сам, чтобы интегрировать DustJS с Marionette.

ИЗМЕНИТЬ

Что-то, что может хорошо сработать, — это создать свойство templateHelpers для объекта подчеркивания. Тогда вы можете сделать что-то вроде:

<span><%= _.templateHelpers.someHelper(data) %></span>
person Simon    schedule 30.05.2014
comment
Как я уже сказал, в проекте уже слишком поздно, у нас уже есть более полусотни шаблонов и представлений, использующих подчеркивание. Но я на самом деле нашел изящное решение, переопределяющее Marionette.Renderer для внедрения функции перевода. Я тестирую реализацию прямо сейчас и, вероятно, опубликую ее в качестве ответа, если она соответствует всем целям! Спасибо - person Mikechaos; 30.05.2014
comment
Ааа, извините, я пропустил эту часть вашего поста. - person Simon; 30.05.2014
comment
@Mikechaos Я добавил для вас дополнительное предложение. - person Simon; 30.05.2014
comment
О, я вообще об этом не подумал. Это не то решение, которое я выбрал (см. мое редактирование), но я буду голосовать, поскольку это решение потенциально может работать красиво и чисто! - person Mikechaos; 30.05.2014
comment
Я пришел, чтобы использовать ваш ответ в части приложения, где мы не использовали ни магистраль, ни марионетку. Внедрение помощника представления было бы гораздо более проблематичным, чем расширение подчеркивания, как вы это сделали! Как так, я отмечу как принятый. Для соответствующего ответа с помощью Marionette я по-прежнему предлагаю это подход. Спасибо - person Mikechaos; 02.06.2014