我想要Ember.js' {{input value =" searchTerm"}}将其值设置为' '当URL更改时

时间:2014-10-22 17:20:09

标签: javascript ember.js properties ember-router

我会尝试尽可能地简化这个问题,

但我需要我的handlebar.js' {{input value =" searchTerm"}}将searchTerm的值设置为' null'每次网址更改。

上述输入旨在自动过滤同一页面上的列表。输入输入会自动更新' searchTerm'对任何打字的

值searchTerm在此操作中定义,名为searchResults

这是控制器中的属性:

searchResults: function() {
    var searchTerm = this.get('searchTerm');
    var regExp = new RegExp(searchTerm, 'i');

    // We use `this.filter` because the contents of `this` is an array of objects
    var filteredResults = this.filter(function(category) {
        return regExp.test(category.get('categoryName'));
    });      
    return filteredResults;
}.property('@each.categoryName', 'searchTerm'),

所以要打破我的需要:

  1. 无论searchTerm的当前值是什么,都需要将其设置为' '
  2. 将searchTerm的值设置为' '仅在页面转换时发生

1 个答案:

答案 0 :(得分:2)

这可以通过didTransitionwillTransition事件处理程序在路由上完成。路由引用了他们的controller(通过this.controller),你仍然可以通过controllerFor获取它(例如:var c = this.controllerFor('controllerName');所以你可以做这样的事情:

App.SomeRouteThatErasesTheSearchTermRoute = Ember.Route.extend({
  actions: {
    // you could implement with didTransition. No arguments for didTransition tho
    didTransition: function() {
      this.controller.set('searchTerm', '');  
    },
    // OR, implement with willTransition
    willTransition: function(transition) {
      this.controller.set('searchTerm', '');
    }
  }
});

你也可以将它作为一个单独的方法来实现,它被解雇on('willTransition'),所以你保留任何现有的处理程序,只需附加你的处理程序。然后你可以将它变成mixin以供其他路由使用,或者其他路由可以从这个类继承,而不会破坏任何其他自定义转换处理程序(如果有的话)。