【问题标题】:Very slow rendering of GridLayout ListView - WinJSGridLayout ListView 的渲染速度非常慢 - WinJS
【发布时间】:2012-12-07 06:33:32
【问题描述】:

这是我的第一个 Windows 8 应用程序...在使用它之前我遇到了最后一个问题。 :)

我有一个布局设置为 GridLayout 的 ListView。加载主页面时,应用程序将 50 个项目添加到 ListView 的数据源。 ListView 需要 5-6 秒来呈现。

注意:项目添加到数据源后 5-6 秒。 XHR/AJAX 调用 + 加载耗时 200-300ms。


这看起来很奇怪。我在下面添加了一些代码:

JS - 定义 ListView 和数据源

this.categoryProducts = new WinJS.Binding.List();
this.productListview = element.querySelector('#category-products-listview').winControl;
this.productListview.itemTemplate = element.querySelector('#product-template');
this.productListview.itemDataSource = this.categoryProducts.dataSource;
this.productListview.oniteminvoked = this._product_clicked.bind(this);

JS - 向数据源添加项目

_ref = data.products;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
   product = _ref[_i];
   _results.push(Category.categoryProducts.push(product));
}

HTML:

<div id="product-template" data-win-control="WinJS.Binding.Template">
    <div class="item product">
        <img class="item-image" src="/images/shopping-bag.png" data-win-bind="src: thumbnail; alt: name" onError="this.src='/images/shopping-bag.png';" />

        <div class="item-details" >
            <div class="item-details-top">
                <h4 class="item-title" data-win-bind="textContent: name"></h4>

            </div>
            <div class="item-details-bottom">
                <div  class="price"> <span style="font-weight:bold;">$</span> <span data-win-bind="textContent: price"></span></div> 
                <div class="reviews" ><span class="icon-comments"></span> <span data-win-bind="textContent: reviews_count"></span></div> 
                <div class="stars" > <span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span>  <span data-win-bind="textContent: stars"></span></div>
            </div>
        </div>
    </div>
</div>

这是 ListView 呈现时的样子。


有什么想法吗?

【问题讨论】:

  • 如果在将数据源传递给列表视图之前将所有项目添加到数据源会怎样?

标签: javascript listview windows-8 winjs


【解决方案1】:

您是在设置 ListView 之前还是之后向 dataSource 添加项目?不是说这就是它,而是想知道您是否通过按自己的方式添加项目而流失了很多。我会下拉项目并创建一个新的绑定列表,然后设置数据源。

我已经以最小的延迟将 100 个项目加载到 listView 中。

  1. 用空List设置ListView
  2. 从网页拉取数据
  3. 使用网络调用的结果创建新的绑定列表
  4. 使用新列表中的新数据源更新 ListView

您的里程可能会有所不同...

【讨论】:

  • 奇怪的是...有效!第一列几乎立即加载,其他列被延迟。另外...我要感谢您的 Youtube 视频!在开发的最初几天,他们确实帮助了我。 :)
  • 抱歉拉了一点......但你知道为什么只有第一列会立即加载吗?其他列仍然有延迟。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2014-11-20
相关资源
最近更新 更多