【问题标题】:JsViews not removing the script tags after updating change with observable api on array使用数组上的可观察 api 更新更改后,JsViews 未删除脚本标签
【发布时间】:2016-08-11 06:09:33
【问题描述】:

我最近一直在使用 JsViews。但我遇到了 $.observable(array).refresh()

的问题

假设我有一个对象数组

countries = [
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
]

当我使用模板循环遍历数组中的每个元素时,它会根据我的要求呈现内容,但是当我查看 HTML 结构时,它会显示如下。

<html>
  <body>
    <script type="jsv#1"></script>
    <div class="country">India</div>
    <script type="jsv/1"></script>
    <script type="jsv#2"></script>
    <div class="country">USA</div>
    <script type="jsv/2"></script>
    <script type="jsv#3"></script>
    <div class="country">Africa</div>
    <script type="jsv/3"></script>
  </body>
<html>

但是当我在数组中获得一个新元素并将其推到顶部时。我有以下数组。

countries = [
  {country : 'Canada'},
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
]

然后我申请

$.observable(countries).refresh(countries);

我得到的 html 结构是:

<html>
  <body>
    <script type="jsv#1"></script>
    <script type="jsv/1"></script>
    <script type="jsv#2"></script>
    <script type="jsv/2"></script>
    <script type="jsv#3"></script>
    <script type="jsv/3"></script>
    <script type="jsv#4"></script>
    <div class="country">Canada</div>
    <script type="jsv/4"></script>
    <script type="jsv#5"></script>
    <div class="country">India</div>
    <script type="jsv/5"></script>
    <script type="jsv#6"></script>
    <div class="country">USA</div>
    <script type="jsv/6"></script>
    <script type="jsv#7"></script>
    <div class="country">Africa</div>
    <script type="jsv/7"></script>
  </body>
<html>

这里没有删除标签“jsv#1”、“jsv#2”、“jsv#3”及其各自的结束标签。

我在 2012 年发布的 JsViews V1.0 中发现了这个问题。

这是正确的行为还是我应该采用不同的插入元素的方法。

谢谢。

【问题讨论】:

    标签: javascript arrays observable jsviews


    【解决方案1】:

    这不是正确的行为。

    V1.0还没有发布所以不清楚你用的是什么版本。

    能否切换到最新版本再试一次:http://www.jsviews.com/#download。

    您不应将国家/地区设置为新数组,然后在新数组上调用refresh()。相反,您应该这样做:

    var countries = [
      {country : 'India'}, 
      {country : 'USA'},
      {country : 'Africa'}
    ];
    
    tmpl.link("#result", countries);
    
    $.observable(countries).refresh([
      {country : 'Canada'},
      {country : 'India'}, 
      {country : 'USA'},
      {country : 'Africa'}
    ]);
    

    见http://www.jsviews.com/#refresh。

    但是为了插入更好使用insert()。见http://www.jsviews.com/#insert。

    【讨论】:

    • 抱歉错误。我使用的是 v1.0PRE。这就是我可以从文件中得到的。
    • 我使用的是最新版本 (0.9.82),并且在使用 #refresh 和 #insert 时遇到了同样的问题。这个问题解决了吗?
    • 它应该可以正常工作。您将拥有&lt;script type="jsv#1_"&gt;&lt;/script&gt;&lt;script type="jsv#5_"&gt;&lt;/script&gt; &lt;div class="country"&gt;Canada&lt;/div&gt; &lt;script type="jsv/5_"&gt;&lt;/script&gt;...&lt;script type="jsv#4_"&gt;&lt;/script&gt; &lt;div class="country"&gt;Africa&lt;/div&gt; &lt;script type="jsv/4_"&gt;&lt;/script&gt;&lt;script type="jsv/1_"&gt; 或类似名称
    • @BorisMoore 我很想知道在我们的 HTML 之间的 DOM 中添加大量 script 标签的原因。如果有的话,你能分享一些想法或链接吗?
    • @agpt:JsViews 数据链接意味着对绑定数据的可观察更改会自动触发对呈现的 HTML 的动态更新。为了实现这一点,JsViews link() 方法在呈现的 HTML 中包含元数据标记,然后将其用作定位器以确保在 HTML 中的正确位置更新内容。元数据不会以任何方式影响视觉呈现,并且主要由一些 HTML 元素上的data-jsv 属性组成,以及一些插入的脚本标记类型:jsv...,当在文本内容中需要定位器时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2016-07-27
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多