我做了一個簡單的概念證明Polymer 1.0應用程序,演示了我的問題:JSBin。檢測陣列突變
在我的問題,我使用array mutation methods改變的磁盤陣列,它包含了購物項目列表。
然而,這似乎並不如預期的工作。我做在dom-repeat
和打印數組的長度時得到一個變化。 但是我不要當我打印數組本身時,或者當我將它包裝在函數中時,獲取更改事件。
總之,這是爲什麼這樣工作?
<p>Number of items: [[list.length]]</p>
?爲什麼這個不工作?
<p>Items inline: [[list]]</p>
<p>Observe function : [[_observe(list)]]</p>
此外,當我取消註釋以下行(在JSBin),事情似乎爲indened工作。但我不喜歡它,因爲它有點冒險。
app.notifyPath('list', app.list.slice());
我已經閱讀了本發行於slice()
修復跌跌撞撞:https://github.com/Polymer/polymer/issues/2068
編輯
因此,審查意見後,回答這個問題:「這是由設計「是肯定的。該陣列本身不會改變(因爲它只是一個參考),但它的屬性做更改。這就是爲什麼slice()
強制重新加載,因爲它創建了一個淺拷貝。
然而,人們可以說這是否正常。是的,變量list
本身沒有變化本身。但將[[list]]
放入HTML代碼中實際觸發了toString()
。並且該函數的結果已經更改爲。
我想我堅持了捎帶的length
財產現在...
您jsbin採樣工作正常,我在Chrome –
,它只是因爲鏈接對象它只是鏈接,它並沒有改變,觀察list.length和返回列表 –
或者你可以在一些var中備份鏈接到數組,通知沒有第二個參數,並立即通知備份列表,我不知道什麼更快,但這種方法不需要克隆數組,並且更多的不需要深入在複雜情況下克隆。 –