我試圖根據來自文本輸入的輸入使用Ember.computed.filter
過濾ArrayController的內容。Ember.js:觸發'Ember.computed.filter'來更新控制器中屬性更改時
App.IndexController = Ember.ArrayController.extend({
filteredPeople: Ember.computed.filter('model', function(person){
var searchFilter = this.get('searchFilter');
var regex = new RegExp(searchFilter, 'i');
return person.firstName.match(regex);
}),
// this is bound to the value of a text input helper
// I'm just pre-filling the value to show that the filtering does work
searchFilter: 'kris'
});
這個工程很棒,並按預期過濾。不過,我希望隨時更新searchFilter
的值(即任何時候有人輸入到文本輸入中)。現在的問題是,只有在模型本身發生變化或控制器第一次加載時纔會更新。
有無論如何觸發Ember.computed.filter
更新時searchFilter
更新?我使用的是Ember.computed.filter
,因爲它似乎比普通的計算屬性效率更高,我相信每次都會重新創建整個數組(請讓我知道我是否錯誤)。此外,Ember.compute.filter只是易於使用,非常乾淨!
我用上面的設置創建了一個JSBin。當用戶輸入文本框時,我想以某種方式觸發Ember.computed.filter
更新自己。
謝謝您的時間和任何援助。
不太容易!這正是我所希望的。我想我甚至在某個時候嘗試過它,但一定已經把這個語法稍微放了下來。謝謝你的JSBin。總是有用,以確認它應該工作=) – Sarus
很高興我能幫上忙。棘手的部分是,如果你只添加'searchFilter'作爲依賴關鍵,它不起作用。可能是因爲它以某種方式覆蓋了由computed.filter()的第一個參數提供的所需「模型」依賴關鍵字。但這只是一個猜測,我仍然需要學習很多關於ember內部的知識。 –
@BavoVanGeit一旦'searchFilter'改變了整個數組應該重新呈現?我的印象是'Ember.computed.filer'通過添加/刪除項目到相同的數組來避免這種情況,但是當我檢查DOM並監視jsbin中的單個'li'時,他們絕對看起來都是每次重新呈現。 –