2sxc - 在 javascript 文件中放置一个 @Content.field 变量

2sxc - Place a @Content.field var in a javascript file

在这个简单的例子中:https://jsfiddle.net/4hxsu4rc/2/

是否可以将 @Content.myVarIntoJsFile 放在通过 <script src="myjs.js"></script> 包含的 js 文件中? 由于它不是视图模板关联文件的一部分 (_myview.cshtml),因此默认情况下不起作用。

我能完成这项工作的唯一方法是将整个 JS 内容放在 _myview.cshtml 中,例如

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

但这会使视图模板文件更难编辑,因为它的大小相当大。如何在外部 JS 文件中使用 @Content.field 替换?

此致, 若昂

一种方法是创建一个隐藏的 div 并将内容字段中的数据放入其中。使用 div 的 id 检索它。

也许更好的方法是使用data-*属性来存储数据,可以通过javascript找到。

这假定您不介意在页面源中包含数据。

有几个选项:)

@joecraig 的建议是使用像

这样的系统
<div data-name="@Content.Name" data-age="@Content.Age">...</div>

传输您在 html 中的数据,以便在您的 javascript 中使用。这适用于简单的用例,并允许您将 "business" 逻辑放在单独的 JS 文件中。

Pro 方法是使用 WebAPI,获取 JSON 所需的数据流,并从中获得乐趣。如果需要,基本上所有 2sxc 数据都可以作为 json 轻松获得。为了给你一个完美的答案,我需要知道你使用的是什么 JS 框架。

例如,如果您使用的是 jQuery,那么类似这样的操作将为您提供类型为 "Category"

的所有项目
var sxc = sxc(someTagInsideYourModule);
var dataPromise = sxc.webApi.get("app/auto/content/Category");
dataPromise.then(function(result) { /* do something */ });

您可以在 https://github.com/2sic/2sxc/wiki/WebApi

上阅读更多相关信息

如果您使用的是其他框架 - 如 AngularJS,可以使用查询服务或内容服务等帮助程序。

PS: 记得为非管理员用户启用读取权限,否则代码只有在登录后才能运行。