GridLayout ListView - WinJS的渲染非常慢

时间:2012-12-06 22:00:28

标签: javascript listview windows-8 winjs

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

我有一个ListView,其布局设置为GridLayout。加载主页面时,该应用程序会向ListView的数据源添加50个项目。 ListView需要5-6秒才能渲染。

NB:将项目添加到dataSource后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在渲染时的样子。

enter image description here


任何想法的人?

1 个答案:

答案 0 :(得分:2)

在设置ListView之前或之后是否向dataSource添加项目?不是说这是它,但想知道你是否通过添加项目来获得大量的流失。我将下拉项目并创建一个新的绑定列表,然后设置dataSource。

我已将100件物品装入listView,延迟时间最短。

  1. 使用空列表
  2. 设置ListView
  3. 从网络中提取数据
  4. 使用来自网络电话的结果
  5. 创建新的绑定列表
  6. 使用新列表中的新数据源更新ListView
  7. 您的里程可能会有所不同......