0

用这个模型

App.Customer  = DS.Model.extend({
  name: DS.attr('string' ),
  postalCode: DS.attr('string' ),
});

这个控制器:

App.CustomersController = Em.ArrayController.extend({
    searchText: null,

    searchResults: function() {
            var searchText = this.get('searchText');
            var regex = new RegExp(searchText);

             if (!searchText) { return this; }

             return this.filterProperty('name',searchText);

    }.property('searchText')
});

我可以过滤名称为 searchText 的客户列表

如何更改它以返回名称与 searchtext 匹配的客户列表(如果 searchText 是“foo”,并且列表中有客户名称为“foobar”、“fooinc”和“foo”,它将返回这三个?

我尝试使用 filter() 方法

return this.filter(function(item,index,enumerable){
        // some code
     });

但 item.name 始终未定义(对于数组中 100 个左右的项目中的每一个)

谢谢

更新

我得到了它与这个代码一起工作

searchResults: function() {
    var searchText = this.get('searchText');
    var self = this;
    var patt1 = new RegExp(self.searchText,"i");

     if (!searchText) { return this;}

     return this.filter(function(item,index,enumerable){
        var data = item.get('name');
        return patt1.test(data);
     });

}.property('searchText')

这与我选择的答案非常相似。

谢谢你。

4

1 回答 1

2

假设您的模板中有一个input这样的助手:

{{input type="text" value=searchText placeholder="Search..."}}

进一步假设您有一个应根据searchText文本字段中指定过滤的项目列表:

<ul>
{{#each place in searchResults}}
  <li><strong>{{place.name}}</strong></li>
{{/each}}
</ul>

这里有一个示例控制器,每当绑定到助手的属性更改时过滤content(重新调用助手) :eachsearchTextvalueinput

App.PlacesController = Ember.ArrayController.extend({
  searchText: '',
  searchResults: function() {
    var searchText = this.get('searchText');
    var regExPattern = '\\b'+searchText+'\\b'; 
    var regexp = new RegExp(regExPattern,'gi');
    return this.get('content').filter(function(place){
      return place.get('name').match(regexp);
    });
  }.property('searchText')
});

注意:您希望搜索文本如何匹配您的属性值取决于您,此示例仅显示一种可能的方式。

请参阅此处查看工作演示

希望能帮助到你。

于 2013-09-14T17:13:02.787 回答