2013-03-14 49 views
2

我开始在Ember.JS,但我想我给自己一个很好的问题。我有一个左侧项目的工作列表,右侧有一个搜索栏。所以在KeyUp事件,我的文本框的值发送到模式,找到如下的比赛:如何使用Ember.JS中的匹配查找模型中的对象?

this.controllerFor('productImages').set('model', App.ProductImage.find({ean_codes: value})); 

我的问题是,难道可以用匹配某种RegExs的,就像如果找我有ID 1234,它会发现它,即使我只搜索'1'?

回答

4

按照Ember Data docs关于查询:

你可以通过哈希查找查询服务器()。

散列的内容对于Ember Data是不透明的;由您的服务器来解释并返回记录列表。

如果你想要客户端过滤,你可以使用方法Ember.Array。此示例显示包含原始数组内容的子集的计算属性。此计算数组仅显示与输入到框中的内容相匹配的项目。

JSBin Example

的Javascript:

App = Ember.Application.create({}); 

App.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
    controller.set('content', [ 
     Ember.Object.create({name: 'Joe'}), 
     Ember.Object.create({name: 'Frank'}), 
     Ember.Object.create({name: 'John'}), 
     Ember.Object.create({name: 'Billy'}), 
     Ember.Object.create({name: 'John'}), 
     Ember.Object.create({name: 'Johnny'}) 
    ]); 
    } 
}); 

App.IndexController = Ember.ArrayController.extend({ 
    content: [], 
    filter: "", 
    filteredContent: function() { 
    var filter = this.get('filter'); 

    return this.get('content').filter(function(item, index, enumerable){ 
     return item.get('name').toLowerCase().match(filter.toLowerCase()); 
    }); 
    }.property('filter', '[email protected]') 

}); 

把手:

<script type="text/x-handlebars" data-template-name="index"> 
    <h2>Index Content:</h2> 
    <span>Filter: </span>{{view Ember.TextField valueBinding=filter}} 
    <ul> 
    {{#each item in filteredContent}} 
     <li>{{item.name}}</li> 
    {{/each}} 
    </ul> 
</script> 
+0

,在非常方便来了,谢谢! – user1519082 2013-03-14 21:05:04

+0

这工作得很好..但是有没有一种方法来消除它,所以当在过滤器框中输入非常快时它不会紧张? – cavneb 2013-08-12 16:04:08

2

灰烬,数据的过滤,记录阵列可能是一个不错的选择。通过使用store.filter而不是store.find,您可以返回过滤客户端的实时记录数组。

要筛选已经被载入记录,使用:

this.controllerFor('productImages').set('model', App.ProductImage.filter(function(hash) { 
    if (hash.get('id').match(/1/)) { return true; } 
}); 

如果需要揭开序幕查询为好,添加查询参数(或空哈希)作为第一个参数的过滤方法:

this.controllerFor('productImages').set('model', App.ProductImage.filter({}, function(hash) { 
    if (hash.get('id').match(/1/)) { return true; } 
}); 

这里还没有文档/指南,所以最好的地方是通过ember-data测试来学习它。以下是一个良好的开端:

相关问题