KnockoutJs – Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined

今天在學習KnockoutJs時 不知道為什麼常常出現這個這個錯誤信息
Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined
TypeError: Cannot call method 'toLowerCase' of undefined
我的Model 大概是這樣的

var shareChiWaiViewModel = {
  sharechiwaiList =ko.observableArray([]),
  selectedfilter: ko.observable(),
}

shareChiWaiViewModel.filteredItems = ko.computed(function() {
  var filter = this.selectedfilter().toLowerCase();
  /*
  * 還有很多還沒有整理好的Code
  * There are lots of mess code below...
  */
});

// Initial object...

// Bing Model
ko.applyBindings(shareChiWaiViewModel);

每當我Refresh時 都會出現
Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined
我的 selectedfilter 應該是有value的..

經過了一段時間的Research
終於發現了問題的所在
原來是因為當Model的selectedfilter 還沒有 被assign value之前..
已經執行了

var filter = this.selectedfilter().toLowerCase();

所以便出現錯誤了

解決方法
只是在定義view model時 先方一個Empty string “” 進這個 observable上便可以..
E.G.

  selectedfilter: ko.observable(""),

Hope you find it useful

Leave a Reply