You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sitefinity页面Widget渲染时Vue关联HTML被移除的问题求助

解决Sitefinity中Vue Widget渲染HTML被移除的问题

我来帮你排查这个问题!从你的描述和代码来看,主要有几个关键原因,咱们一步步解决:

1. 首先修正模板语法错误

你在v-for="job in jobs"循环里直接写了{{jobname}},但实际上每个循环项是job对象,必须通过job.来访问属性。这个错误会导致Vue无法正确解析数据,甚至引发静默报错,是渲染失败的基础原因之一。

2. 避开Sitefinity的服务器端语法冲突

Sitefinity基于ASP.NET Web Forms,它会把Vue默认的{{}}分隔符当成服务器端绑定表达式处理,直接移除这些内容。解决办法是修改Vue的分隔符,换成Sitefinity不会识别的符号:

delimiters: ['[[', ']]']

3. 确保Vue在DOM完全加载后初始化

如果Vue代码执行时,.latestjobs元素还没被Sitefinity完全渲染到页面上,Vue就找不到挂载目标,自然无法渲染内容。需要把初始化代码放在DOM加载完成后的回调里。

4. 防止Sitefinity过滤自定义属性

Sitefinity的安全机制可能会移除它不认识的属性(比如v-for),导致Vue指令失效。这种情况下,把模板移到Vue内部的template选项中定义,避免Sitefinity解析这些指令。


修正后的完整代码示例

<div class="col-md-4">
  <!-- 用空div作为Vue挂载点,避免Sitefinity处理内部模板 -->
  <div id="jobs-container"></div>
</div>

<script>
// 等待DOM完全加载后初始化Vue
window.addEventListener('load', function() {
  var app = new Vue({
    el: "#jobs-container",
    // 修改分隔符,避开Sitefinity服务器端解析
    delimiters: ['[[', ']]'],
    // 在Vue内部定义模板,防止v-for等指令被过滤
    template: `
      <ul class="latestjobs">
        <li v-for="job in jobs">[[job.jobname]]<br /><em>[[job.companyname]]</em></li>
      </ul>
    `,
    data: {
      jobs: [
        { "jobname": "Test", "companyname": "Test" }
      ]
    }
  });
});
</script>

另外,建议打开浏览器控制台(F12)查看是否有Vue相关报错,这能帮你更快定位剩余问题。

内容的提问来源于stack exchange,提问作者Wade73

火山引擎 最新活动