【问题标题】:Ember alternative to query params with service使用服务查询参数的 Ember 替代方案
【发布时间】:2018-04-13 09:36:37
【问题描述】:

所以我有这个模型的路线:

model() {
   var self = this;
   return RSVP.hash({
    comptes : this.get('store').findAll('compte'),
    contrats: 
    this.get('store').findAll('contrat').then(function(contrats) {
      return contrats.filterBy("contrat_fk.id", 
         self.get('currentContract.contrat.id'));
      }),
    })
  }

我的目标是使用我的服务 currentContract 提供的值过滤模型合同。

页面重新加载时效果很好,但是当我更改路线并返回此路线时,模型似乎没有加载,我必须重新加载页面才能看到它。

而且我真的不想使用查询参数并将合同 ID 放在 URL 中

【问题讨论】:

    标签: ember.js ember-data ember-cli query-parameters


    【解决方案1】:

    将过滤器逻辑移动到控制器中的计算机属性。那么当依赖键正确时,一切都会正常工作。

    例如,在您的路线中,您可以这样做:

    model() {
      return this.store.findAll('contrat');
    }
    

    接下来在你的控制器中:

    currentContract: service(),
    filteredContracts: computed('currentContract.contrat.id', 'model.@each.id', {
      get() {
        const cci = this.currentContract.contrat.id;
        return this.model.filter(c => c.id === cci);
      }
    }),
    

    小心:此代码使用. 作为getter,它适用于ember 3.1。对于旧版本,您需要使用.get()

    【讨论】:

    • 例如,在我的路线中,我使用 findAll('nameofmodel') 获取模型。然后在我的控制器中,我用我的模型定义了一个计算属性,然后过滤 this.get('model') ?
    • 基本上是的。我已经插入了一个例子。
    • 非常感谢您花时间帮助我!我想我只会坚持我的服务,它为我提供当前的合同和我需要的所有信息,但你的回答肯定会帮助我!
    • 我不确定你的意思。我的代码示例确实使用了您的服务。它只是将代码从路由移动到控制器。
    • 总是使用控制器。您可以使用setupController 或从model 挂钩返回数据,但这始终使用控制器。实际上你应该使用控制器。
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多