2017-06-09 147 views
0

我使用一個應用程序下面的代碼Knockout.js,但事情了我的注意有以下功能:怪異的行爲

this.filterLocations = ko.computed(function() { 
        return ko.utils.arrayFilter(self.locations(), function (loc) { 
         if(self.textFilter() != undefined){ 
          self.hideMarkers(); 
          return loc.title.toLowerCase().includes(self.textFilter().toLowerCase()); 
         }else{ 
          return true; 
         } 

        }); 
       }, this); 

我想打電話給在該self.hideMarkers() else語句,但是當我用它else語句我得到了以下錯誤內:

Uncaught TypeError: self.hideMarkers is not a function

我想不通爲什麼會這樣,因爲在同一呼叫if語句沒有任何錯誤和工作精細。

功能碼是:

this.hideMarkers = function() { 
     for (var i = 0; i < self.markers.length; i++) { 
      var isIn = true; 
      for (var y = 0; y < self.filterLocations().length; y++) { 
       var el = self.filterLocations()[y]; 
       if(el.id !== i + 1){ 
        isIn = false; 
       }else{ 
        isIn = true; 
        break; 
       } 
      } 
      if(isIn){ 
       self.markers[i].setMap(map); 
      }else{ 
       self.markers[i].setMap(null); 
      } 
     } 
    }; 

對此有何想法?

+0

不知道實際的問題是什麼,但它看起來像我正在做各種各樣的東西*裏面*您的過濾方法,應該發生在外面... – user3297291

+0

是的,因爲在這種情況下,我有項目顯示,還有一個標記列表,所以過濾器函數需要返回一個布爾值來過濾列表,但也調用方法過濾地圖中的標記 –

回答

0

我解決了這個問題直接調用:

self.filterLocations = ko.computed(function() { 
        return ko.utils.arrayFilter(self.locations(), function (loc) { 
         if(self.textFilter() == undefined || self.textFilter() == ""){ 
          for (var i = 0; i < self.markers.length; i++) { 
           self.markers[i].setMap(map); 
          } 
          return true; 
         } 
         self.hideMarkers(); 
         return loc.title.toLowerCase().includes(self.textFilter().toLowerCase()); 
        }); 
       }, this); 

但是,這仍然是一個怪異的行爲。