【问题标题】:EmberJS - one way binding of query param to input field value brokenEmberJS - 查询参数与输入字段值的一种绑定方式损坏
【发布时间】:2015-01-19 18:47:19
【问题描述】:

在下面的例子中:

App = Ember.Application.create();

App.ApplicationController = Ember.ArrayController.extend({
  queryParams: ['query'],
  query: null,

  queryField: Ember.computed.oneWay('query'),
  actions: {
    search: function() {
      this.set('query', this.get('queryField'));
    }
  }
});

App.ApplicationRoute = Ember.Route.extend({

  queryParams: {
    query: {
      // Opt into full transition
      refreshModel: true
    }
  } 
});

运行示例:http://jsbin.com/tukoye/2#/?query=22345

...如果我们到达 ...?query=22345,任何更改查询参数的后续地址导航也将更新输入字段值。但是在执行第一次搜索后,这个绑定被破坏了,当查询参数改变时,字段值不再更新。

这不就是: 查询字段:Ember.computed.oneWay('query') 总是更新 queryField 属性?

(此处的jsBin代码:http://jsbin.com/tukoye/edit?html,js



一种可能的解决方案是将其添加到路由:

actions: {
        queryParamsDidChange: function(params) {
            this.controllerFor('application').set('queryField', params.query);
        }
    }

... 并从控制器中删除 queryField: Ember.computed.oneWay('query')

我正在寻找最佳实践方法。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    Ember.computed.oneWay 背后的想法是您提供了一种方式绑定。因此,在您将 queryField 更改为其他内容(仅编辑输入)后,它将被覆盖。

    你可以做的是创建一个观察者来更新你的 queryField 有一些延迟,例如使用Ember.run.debounce

    【讨论】:

    • 这样一个标准功能似乎很麻烦,也许有更直接的方法?
    • 我在我的问题中添加了使用 queryParamsDidChange 的解决方案,您对此有何看法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2016-02-27
    • 2014-08-30
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多