2017-04-13 20 views
1

我們使用editableCellTemplate而不是單元格模板上的文本框。當滾動出視圖時,Ui網格觸發錯誤文本框中的ng-blur

http://plnkr.co/edit/M8Do1p?p=preview

<input class="grid_textbox text-center" 
    ng-blur="grid.appScope.quantityChanged(row.entity)" 
    ng-model="MODEL_COL_FIELD" style="width:80%"/> 

我們確定通過在文本框醒目NG模糊的變化。但是,我們注意到當用戶滾動時文本框不在視圖中時,它不會在正確的文本框上觸發ng模糊。

要plnkr重現

  1. 點擊第一個文本框。
  2. 單擊第二個文本框,這將顯示有關模糊事件的信息。這是預期的行爲
  3. 要重現錯誤,請單擊清除並再次單擊第一個文本框。
  4. 向下滾動直至中下並點擊文本框。它不會輸出與上面相同的消息。

有沒有辦法解決這個問題或解決方法來獲取編輯的行?

更新: 我試過Guranjan的解決方案,它的工作,但另一個問題出現了。我不確定這是否應該是另一個問題,但它仍然與滾動和模糊有關。

要複製

  1. 點擊文本框1和輸入數字
  2. 滾動,直到它拿出來看。
  3. 點擊另一個文本框並進行編輯。
  4. 這次只是滾動。您可以看到將光標對準其他文本框並且不會觸發模糊。
  5. 編輯一個。然後再次滾動(鼠標滾輪或拖動滾動條)。編輯然後滾動。
  6. 單擊一個文本框觸發模糊。它不會顯示所有的編輯。

這是Guranjan的嘗試者。 http://plnkr.co/edit/RWM2y7NLC7821c9vQDO6?p=preview

回答

2

這是因爲ui-grid重用了這些元素。解決問題的一種方法是,將當前行的值存儲在focus上,並將其用於blur。例如,在您的應用程序範圍內創建變量:

$scope.currentValue = {}; 

,然後你可以輸入焦點更新此:

ng-focus="grid.appScope.currentValue = row.entity" 

,然後你可以使用$scope.currentValue做任何你需要做的事。

Updated Plnkr

+0

這比我想的要簡單多了!謝謝! :) – Mark

+0

嗨Guranjan,我遇到了另一個問題。你的解決方案最初的工作,但我有滾動另一個問題。 – Mark

+0

@馬克有什麼問題? –

相關問題