2016-07-29 64 views
0

我有一個kendo ui listview和一個模板,有條件地隱藏基於底層數據的元素。一個例子是如下:Kendo ui列表視圖在更改數據時失去焦點

<script type="text/x-kendo-template" id="template"> 
    <div class="product"> 
     <img src="../content/web/foods/#= ProductID #.jpg" alt="#: ProductName # image" /> 
     <h3>#:ProductName#</h3> 
     <p>#:kendo.toString(UnitPrice, "c")#</p> 
     <div> 
      # if (Discontinued) { # 
       Discontinued Product 
      # } # 
     </div> 
    </div> 
</script> 

如果我修改來設置停產用下面的代碼底層的dataSource項目:

data[index].set('Discontinued', true);  

如果索引是當前選擇的項目則該項目失去聚焦和不再被選中。

請參閱以下dojo示例http://dojo.telerik.com/UlOze,從列表中選擇一個項目,然後將其設置爲停用。

有沒有人發現這個問題的解決方案/解決方法?

謝謝。

-------------最終的解決方案--------------

從dimodi的回答繼下面我拼湊的解決方案..爲此,dataSource必須具有schema - > model - > id屬性集。

1捕獲當前選定的數據項:

 var selectedItem = $(listElement).find(".k-state-selected"); 
     var selectedDataItem = list.dataItem(selectedItem); 

第二:調用.SET重新找到該數據項,並設置K-狀態選擇下課。這是因爲列表組件正在重新生成uid。

 if (selectedDataItem) { 
     var newSelectedItem = list.dataSource.get(selectedDataItem.ProductID) 
     var uid = newSelectedItem.uid; 
     jQuery("[data-uid='" + uid + "']").addClass("k-state-selected"); 
     } 

我已經更新了原來的道場,以顯示該解決方案,櫃面它可以幫助別人。

回答

2

當數據項發生變化時,其相應的ListView項目會被重新渲染以應用更改。結果,選擇失去了,因爲它是一個純粹的視覺特徵,並沒有在重新綁定中持續存在。您可以在使用set()之前檢查是否選擇了某個項目,然後通過將k-state-selected類別應用於元素,然後手動恢復該選擇。

+0

我似乎無法得到這個解決方案的工作,當基礎數據改變時,addClass不起作用,但如果沒有任何改變,那麼它確實有效。我試着用setTimeout來看看是否有幫助,但沒有喜悅。你需要做其他事情來完成這項工作嗎? – ciantrius

+0

原諒上面的評論。我剛剛注意到,listview正在重新生成數據源元素的uid。我已經糾正了代碼來應對這個問題,現在它可以工作。 – ciantrius