You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSRender子模板中data-link无法绑定数据问题求助

解决JSViews中data-link输入框不显示值的问题

问题根源是你只用了JSRender的纯静态渲染能力,但data-link是JSViews的双向绑定特性,必须启用JSViews的绑定机制才能生效。

关键修正点:

  1. 确保页面引入了jQuery和JSViews库(JSRender是JSViews的子集,双向绑定依赖完整的JSViews)
  2. 不要用$.render()生成静态HTML,改用$.link()方法把模板和数据绑定到DOM元素上,激活data-link的双向绑定逻辑
  3. 模板遍历数据时,使用JSViews的绑定语法{^{for ...}}(带^符号的双大括号),而非JSRender的普通遍历语法

完整可运行代码示例:

<!-- 引入本地的jQuery和JSViews文件 -->
<script src="jquery.min.js"></script>
<script src="jsviews.min.js"></script>

<!-- 子模板 -->
<script id="columnTemplate" type="text/x-jsrender">
  <div>
    <em>{{:name}}</em>
    <input data-link="name" />
  </div>
</script>

<script id="rowTemplate" type="text/x-jsrender">
  <span>
    <b>{{:name}}</b>
    <input data-link="name" />
  </span>
</script>

<!-- 主模板(原Demo外层模板,你可能遗漏了这部分) -->
<script id="movieTemplate" type="text/x-jsrender">
  <h3>{{:title}}</h3>
  {^{for languages tmpl=tmpl/}} <!-- 绑定模式的for循环语法 -->
</script>

<!-- 渲染容器 -->
<div id="moviesContainer"></div>

<script>
var movies = [
  {
    title: "Meet Joe Black",
    tmpl: "columnTemplate",
    languages: [
      {name: "English"},
      {name: "French"}
    ]
  },
  {
    title: "Eyes Wide Shut",
    tmpl: "rowTemplate",
    languages: [
      {name: "French"},
      {name: "Esperanto"},
      {name: "Spanish"}
    ]
  }
];

// 核心:用JSViews的link方法绑定数据,而非render
$.link("#moviesContainer", movies, {
  template: "#movieTemplate"
});
</script>

原因说明:

你之前大概率用了$.render()方法,这个方法仅生成静态HTML,不会处理data-link的绑定逻辑。而$.link()会将数据转为可观察对象,同时把模板与DOM元素绑定,不仅能让输入框同步显示name字段值,还能实现数据的双向修改同步。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:15:31