2017-04-25 74 views
0

我以簡化形式使用以下代碼。 我有一個模板,顯示來自_stores數組的商店列表。根據應用程序中設置的其他屬性,_sort和_filter函數會很好地完成各自的工作並顯示我想查看的列表。聚合物template.render()不可靠

當我重新計算每個商店的距離(運行_stores trough calculateDistance)時,我想通過調用_search()調用Polymer .render()函數來重新呈現商店列表。

這個調用是不可靠的:有時會渲染,有時不會。它發生在桌面和移動,safari和android,所以它似乎是一個聚合物問題。我無法找到造成這種情況的原因。任何想法?

<template id="storeList" is="dom-repeat" items="{{_stores}}" sort="_sort" filter="_filter"> 
     <div class="search_result"> 
     <div class="picture"> 

      <div class="logo" hidden$="{{!item.logo.length}}"> 
      <div class="centered"> 
       <img src$="{{item.logo}}" alt="logo" /> 
      </div> 
      </div>.... 
</template> 


<script> 
Polymer({ 
    is: 'user-store-search-page', 

    properties: { 
    ... 
    _stores: Array 
    ... 
    }, 
    _calculateDistance: function() { 
     this._stores.forEach(s) { 
      //do stuff per store 

     } 
    }, 
    _filter: function (store) { 
     //do filtering stuff 
    }, 
    _sort: function (a, b) { 
     //sort stuff 
    }, 
    _search: function() { 
     this.$.storeList.render(); 
    } 
+0

你需要真正使這個列表進行任何動作使用的計算性能優勢,爲重新呈現你的名單?你的陣列上的任何變化應該是可見的 – Kejt

+0

我也這麼認爲。 我看到我使用原生JavaScript數組突變。這就是我稱之爲渲染的原因。 奇怪的是,有時候會渲染! 我發現了一個解決方法,創建一個空的對象: –

回答

0

我對_stores陣列:)

<template id="storeList" is="dom-repeat" items="[[_displayStores]]" sort="_sort" filter="_filter"> 
    <div class="search_result"> 
    <div class="picture"> 

     <div class="logo" hidden$="{{!item.logo.length}}"> 
     <div class="centered"> 
      <img src$="{{item.logo}}" alt="logo" /> 
     </div> 
     </div>.... 
</template> 


<script> 
Polymer({ 
    is: 'user-store-search-page', 

    properties: { 
    ... 
    _stores: Array, 
    _displayStores: { 
     type: Array, 
     computed: '_computeStoresToDisplay(_stores.*)' 
    } 
    ... 
    }, 
    _computeStoresToDisplay: function(stores) { 
     return stores.value; 
    }, 
    _calculateDistance: function() { 
     this._stores.forEach(s) { 
      //do stuff per store 

     } 
    }, 
    _filter: function (store) { 
     //do filtering stuff 
    }, 
    _sort: function (a, b) { 
     //sort stuff 
    }, 
    _search: function() { 
     this.$.storeList.render(); 
    } 
</script> 
+0

這工作得很好,但似乎將拼接插入模板填充我的控制檯(最終它呈現:) polymer-micro.html:277 [dom-重複:: dom重複]:期望的數組項目,找到 對象{keySplices:Array(1),indexSplices:Array(1)} –

+1

och抱歉,那麼它不應該是stores.value也許:))結帳這個對象,你會看到什麼使用 – Kejt

+0

實際上,經過一些更多的研究後,我發現列表中的距離值沒有更新,如果列表本身沒有改變:即使是你的修復。 該列表按距離排序,但當距離改變但排序保持相等時,聚合物未顯示新距離。只有當我強制對其他標籤/過濾進行不同的排序。 –