EmberJS 在用户键入时过滤项目数组
EmberJS filter array of items as the user types
我对Ember很陌生,并试图在EmberJS中为项目数组编写一个简单的搜索/过滤器,但它似乎比看起来更难。我在这里发现了一个类似的问题,但我似乎无法将搜索输入绑定到函数。我的例子是EmberJS网站上的待办事项应用程序。
<script type="text/x-handlebars" data-template-name="todos">
{{input type="text" id="search-todo" placeholder="Search Todo List..." value=searchTerm}}
.....
</script>
在我的App.TodosController
里,我有
searchResult: function(){
var searchTerm = this.get('searchTerm');
if(!searchTerm.trim()){return;}
var regExp = new RegExp(searchTerm);
return this.get('content').filter(function(item){
return regExp.test(item.get('title'));
});
}.property('searchTerm','@each.title')
但是当我打字时,什么也没发生。我尝试将searchResult
添加到控件的actions
哈希中,当我将action= searchResult
添加到脚本标签时,我看到该函数被调用,但我什么也没发生。 基本上,我只想像 AngularJS 一样对列表进行简单的过滤,我希望它不仅超过 title
个,而且包含所有内容,我不需要它是一个单独的路由,如果它必须在单独的路由中,我仍然不知道如何完成此操作。
http://jsbin.com/AViZATE/20/edit
感谢您的帮助。
我能够通过添加observes
关键字来解决它。
这是解决方案 http://jsbin.com/AViZATE/37 的链接
searchResult: function(){
var searchTerm = this.get('searchTerm');
var regExp = new RegExp(searchTerm,'i');
this.get('model').set('content',this.store.filter('todo',function(item){
return regExp.test(item.get('title'));
}));
}.observes('searchTerm')
在 HTML 中,我有
{{input type="text" id="search-todo" placeholder="Search Todo List..." value=searchTerm}}
执行此操作的"Ember 方法"是创建一个自定义视图,该视图侦听 keyUp 事件(或任何其他事件)并将搜索词发送到控制器的函数:
Todos.SearchTodoView = Ember.TextField.extend({
keyUp: function(event){
this.get('controller').send('searchResult', this.value);
}
});
由于某种原因,我无法让它在您的小提琴上工作,当我尝试从视图中访问控制器时,它会返回视图本身。但我知道它可以工作,因为我在自己的应用程序中使用它。
相关文章:
- 相对于角度控制器中的另一个阵列过滤阵列项目
- 限制在角度中过滤是否会阻止在 ng 重复中加载其他项目
- 观察角度过滤项目的变化
- 如何过滤推特流API订阅源,只获取与新闻相关的项目
- 使用 bxSlider 使用显示/隐藏过滤滑块项目
- jQuery在过滤后仅导航可见项目
- 角度按条件过滤数组中的多个项目
- 使用 .filter .map .some .indexOf 等过滤项目
- 角度.js分页过滤的数据并显示总项目,而无需在视图/控制器中复制代码
- Angular:过滤多个项目
- Jquery同位素过滤淡化不匹配的项目,而不是隐藏
- 使用同位素过滤后,当项目的宽度小于3时,请更改项目的宽度
- 使用下拉菜单反应过滤项目
- 用angular js过滤项目
- JavaScript | AngularJS:根据日期过滤结果过滤项目
- 过滤jQuery可排序的项目
- AppleScript JXA过滤表与许多行相同的名称,但不同的项目
- 我应该如何创建一个项目列表,过滤下拉项目选择在引导
- 我如何格式化谷歌图表数据,以显示项目的计数,但按年过滤
- 使用 jQuery (AJAX) 过滤项目 - 请求以错误的顺序完成