【问题标题】:JsViews doesn't seem to work with numeric propertiesJsViews 似乎不适用于数字属性
【发布时间】:2018-07-23 09:38:01
【问题描述】:

当我尝试传递带有数字属性的 JavaScript 对象时

{ 1: "One", 2: "Two", 3: "Three" }

数据绑定不呈现属性值,只呈现示例中的数字

$.templates("template", "#template");
$.link.template("#row", { 1: "One", 2: "Two", 3: "Three" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>

<script id="template" type="text/x-jsrender">
  <td>{{:1}}</td>
  <td>{{:2}}</td>
  <td>{{:3}}</td>
</script>

<table>
  <tr id="row">
  </tr>
</table>

但是,如果我将对象的属性名称更改为以字母开头的名称,则可以正常工作

$.templates("template", "#template");
$.link.template("#row", { n1: "One", n2: "Two", n3: "Three" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>

<script id="template" type="text/x-jsrender">
  <td>{{:n1}}</td>
  <td>{{:n2}}</td>
  <td>{{:n3}}</td>
</script>

<table>
  <tr id="row">
  </tr>
</table>

是错误还是功能?如何让 jsViews 使用数字属性而不转换传递的对象?

【问题讨论】:

    标签: javascript jquery jsviews


    【解决方案1】:

    如果您为某个整数编写 {{:4}},那么 JsRender 会将其视为表达式并对其进行计算。 (例如{{:4*12+2}} 将呈现50)。

    在 JavaScript 中,如果对象属性名称(键)不是有效的标识符名称,则必须使用方括号访问器语法。

    在 JsRender/JsViews 模板中也是如此。 (见www.jsviews.com/#paths)。

    这里有多个例子:

    $.templates("template", "#template");
    $.link.template("#row",
     { 1: "One", "2": "Two", 3: "Three", other: { 50: "fifty" }, 4: { 5: "five"}, "a b": "AB" });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
    
    <script id="template" type="text/x-jsrender">
      <td>{{:#data[1]}}</td>
      <td>{{:#data[1+1]}}</td>
      <td>{{:#data["3"]}}</td>
      <td>{{:other[50]}}</td>
      <td>{{:~root[1]}}</td>
      <td>{{:#data[4]["5"]}}</td>
      <td>{{:#data["a b"]}}</td>
    </script>
    
    <table>
      <tr id="row">
      </tr>
    </table>

    【讨论】:

      【解决方案2】:

      请查看JSRender/JSView
      在这里,如果您看到最后一节 Sample: {{:#index ...}},它使用 json 对象的索引,当您使用数字作为 json 对象中的键并尝试映射它时,也会发生同样的情况在模板中,因此模板将其视为索引而不是键。 更好地使用一些带有数字的静态字母,如 key1、key2.. 等。

      $.templates("template", "#template");
      $.link.template("#row", {key1: "One", key2: "Two", key3: "Three" });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
      
      <script id="template" type="text/x-jsrender">
        <td>{{:key1}}</td>
        <td>{{:key2}}</td>
        <td>{{:key3}}</td>
      </script>
      
      <table>
        <tr id="row">
        </tr>
      </table>

      【讨论】:

        【解决方案3】:

        我认为你应该像下面这样使用字符串。

        { "1": "One", "2": "Two", "3": "Three" }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-10
          • 2021-06-24
          • 1970-01-01
          • 2014-09-10
          • 1970-01-01
          • 2020-11-24
          • 1970-01-01
          相关资源
          最近更新 更多