首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KnockoutJS过滤数组

KnockoutJS过滤数组
EN

Stack Overflow用户
提问于 2018-05-11 15:12:12
回答 1查看 2K关注 0票数 0

我有一个可观察的数组,该数组包含一个对象列表,我想根据用户输入来筛选这些对象。如果用户在两个不同的位置搜索数组中出现的单词,那么filter函数应该返回两个对象的标题,并删除或隐藏数组中与用户输入不匹配的所有其他对象。我必须使用敲除js来预置这个对我来说仍然是新的特性。当前,我的filter函数检查用户输入是否包含在数组中某个对象的标题中,如果没有,则删除对象。然而,这并没有为我提供我所需要的,因为它没有准确地过滤列表。

My ViewMode

代码语言:javascript
运行
复制
var viewModel = function() {
var self = this;
self.filter = ko.observable('');
self.locationList = ko.observableArray(model);
self.filterList = function(){

    return ko.utils.arrayFilter(self.locationList(), function(location) {

      if(location.title == self.filter()){

        return location.title
      }

       else if( location.title.includes(self.filter()) ){

          return location.title
       }

       else{

          return self.locationList.remove(location)
       }

    });
  };
}

视图

代码语言:javascript
运行
复制
   <section class="col-lg-2 sidenav">
      <div class="row">
        <div class="col-lg-12">
          <div class="input-group">
            <input data-bind="textInput: filter"
             type="text" class="form-control" placeholder="Filter Places"
             aria-describedby="basic-addon2" id="test">
            <button data-bind="click: filterList id="basic-addon2">
              <i class="glyphicon glyphicon-filter"></i>
            Filter
          </button>
          </div>
        </div>

        <div class="col-lg-12">
          <hr>
          <div data-bind="foreach: locationList">
            <p data-bind="text: $data.title"></p>
          </div>
        </div>
      </div>
    </section>
EN

回答 1

Stack Overflow用户

发布于 2018-05-11 18:09:12

这个问题的答案可以找到由Viraj回答的这里

ViewModel

代码语言:javascript
运行
复制
var viewModel = function() {
var self = this;
self.filter = ko.observable('');
self.locationList = ko.observableArray(model);
self.filterList = ko.computed(function(){
    return self.locationList().filter(
      function(location){
        return (self.filter().length == 0 || location.title.toLowerCase().includes(self.filter().toLowerCase()));
      }
    );
  });
}

视图

代码语言:javascript
运行
复制
<main class="container-fluid">
<div class="row">
    <section class="col-lg-2 sidenav">
      <div class="row">
        <div class="col-lg-12">
          <div class="input-group">
            <input data-bind="textInput: filter, valueUpdate: 'keyup'"
             type="text" class="form-control" placeholder="Filter Places"
             aria-describedby="basic-addon2" id="test">
          </div>
        </div>
        <div class="col-lg-12">
          <hr>
          <div data-bind="foreach: filterList">
            <p data-bind="text: $data.title"></p>
          </div>
        </div>
      </div>
    </section>
    <section class="col-lg-10" id="map"></section>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50295334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档