2sxc — поместить переменную @Content.field в файл javascript

В этом простом примере: https://jsfiddle.net/4hxsu4rc/2/

Можно ли разместить @Content.myVarIntoJsFile внутри js-файла, который включается через <script src="myjs.js"></script>? Поскольку он не является частью файла, связанного с шаблоном представления (_myview.cshtml), он не работает по умолчанию.

Единственный способ, которым я могу это сделать, - это иметь весь контент JS внутри _myview.cshtml, например

<script type="text/javascript">
function myfunction(myvalue) {
    alert('@Content.myVarIntoJsFile' + myvalue);
}
</script>

но это усложняет редактирование файла шаблона вида, так как размер будет значителен. Как я могу использовать замены @Content.field во внешних файлах JS?

С уважением, Жоао


person João Gomes    schedule 30.08.2017    source источник
comment
Eval может помочь вам, но, честно говоря, вам следует избегать его использования.   -  person Wexoni    schedule 30.08.2017


Ответы (2)


Есть несколько вариантов :)

То, что предлагал @joecraig, - это использовать такую ​​​​систему, как

<div data-name="@Content.Name" data-age="@Content.Age">...</div>

для переноса ваших данных в html для использования в вашем javascript. Это хорошо работает для простых случаев использования и позволяет вам поместить вашу «бизнес» логику в отдельные файлы JS.

Pro-метод — использовать WebAPI, получать JSON-потоки нужных вам данных и получать удовольствие. В основном все 2sxc-данные легко доступны в виде json, если вы этого хотите. Чтобы дать вам идеальный ответ, мне нужно знать, какую JS-инфраструктуру вы используете.

Например, если вы используете jQuery, то что-то вроде этого даст вам все элементы типа «Категория».

var sxc = $2sxc(someTagInsideYourModule);
var dataPromise = sxc.webApi.get("app/auto/content/Category");
dataPromise.then(function(result) { /* do something */ });

Подробнее об этом можно прочитать на странице https://github.com/2sic/2sxc/wiki/WebApi

Если вы используете другие фреймворки, такие как AngularJS, есть помощники, такие как Query-Service или Content-Service.

PS: не забудьте включить права на чтение для пользователей без прав администратора, иначе код будет работать только при входе в систему.

person iJungleBoy    schedule 07.09.2017

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

Возможно, лучшим подходом было бы использование атрибутов data-* для хранения данных, которые можно найти с помощью javascript.

Это предполагает, что вы не возражаете против наличия данных в источнике страницы.

person Joe Craig    schedule 31.08.2017
comment
Мы все еще говорим о 2sxc? - person João Gomes; 01.09.2017