2016-09-07 68 views
0

所以我最近插入了我想成为一个过滤系统到我的项目使用knockout.js。我将下面的代码插入到我的项目中。淘汰赛js:ko.utils.arrayFilter工作不正常

self.pointsFilter = ko.computed(function(){ 
    return ko.utils.arrayFilter(self.pointsList(), function(pointItem){ 
     return pointItem.done = true; 
    }) 
    }); 

这里是我exisiting代码前面:

var point = function(obj){ 
    var self = this; 

    this.name = obj.name; 
    this.street = obj.street; 
    this.city = obj.city; 
    this.state = obj.stat; 
    this.zip = obj.zip; 
    this.food = ko.observable(obj.food); 
    this.lat = ko.observable(obj.lat); 
    this.lng = ko.observable(obj.lng); 
    this.map = map; 

    this.fullAddress = function(){ 
    return self.street + self.city + "</br>" + self.state + self.zip; 
    }; 

    this.formattedAddress = function(){ 
    var currentStreet = self.street + self.city + self.state + self.zip; 
    var newAddress = currentStreet.replace(/ /g, '+'); 
    return newAddress; 
    }; 

    this.formattedName = function(){ 
    var newName = self.name.replace(/ /g, ''); 
    return newName; 
    } 

} 

var viewModel = function(){ 
    var self = this; 
    var marker; 

    this.pointsList = ko.observableArray([]); 

    points.forEach(function(pointItem){ 
    self.pointsList.push(new point(pointItem)); 
    }); 

    self.pointsList().forEach(function(pointItem){ 

    console.log(pointItem.formattedName()); 
    console.log(pointItem.formattedAddress()); 

    pointItem.marker = marker; 

    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(pointItem.lat(), pointItem.lng()), 
     map: map, 
     animation: google.maps.Animation.DROP, 
    }); 

    google.maps.event.addListener(marker, 'click', function(){ 
     if(infowindow.marker != marker){ 
     marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png'), 
     infowindow.open(map, this); 
     infowindow.setContent('<div><h1>' + pointItem.name + 
     '</h1><h2>' + pointItem.fullAddress() + 
     '</h2><img src=' + streetViewRequest + 
     '><div id="instafeed">' + '</div</div>' + instafeedRequest()); 
     } 
    }); 

    });  

    self.pointsFilter = ko.computed(function(){ 
    return ko.utils.arrayFilter(self.pointsList(), function(pointItem){ 
     return pointItem.done = true; 
    }) 
    }) 

} 

如果您想填充的GitHub库,你可以在这里找到 current github repository

+0

https://stackoverflow.com/questions/15647114/if-statement的可能欺骗 - 被忽视 – JohnnyHK

回答

1

你需要Boolean结果在你的return过滤器的声明仅返回已完成值为true的事情。您的一个等于做了一项任务,而不是一个Boolean比较。

换句话说,你需要一个双(非威吓值或三重等于),像这样:

return pointItem.done == true; 
+0

所以我有一个过滤器的js和我有过滤器框,但它不会做任何事情。所以我想获得他们输入的名称以启用该位置的infowindow。我是否需要添加新的事件列表或以某种方式触发已存在的信息窗口... –