【问题标题】:EmberJS, inspecting objects in a hasMany relation when they are still not loadedEmberJS,在尚未加载时检查 hasMany 关系中的对象
【发布时间】:2016-06-13 15:29:26
【问题描述】:

作为我的应用程序工作流程的一部分,我遇到了一个冲突情况:我的代码的一部分试图将特定的 Object 查找到尚未加载的 hasMany 关系中,因此它正在返回 @ 987654324@.

我正在使用Ember.Array.findBy method,希望它能处理所有承诺的特质。

这是失败的行:

this.get('report.charts').findBy('questionId', questionId);
//-> undefined

很明显,在我调用这一行时,report.charts 并未全部加载:

this.get('report.charts').map(function(e){ return e.get('questionId') });
//-> ["Wiese_030", undefined, undefined, undefined, undefined]

更多信息:

this.get('report.charts').toString();
//-> "<DS.PromiseManyArray:ember1209>"

这种情况有什么办法处理?

【问题讨论】:

    标签: ember.js promise has-many


    【解决方案1】:

    当您使用异步关系(当前 ember 版本中所有关系的默认设置)时,您将始终获得 PromiseObjectPromiseArray

    如果您在计算属性中,您可以直接使用它,因为它会触发更新。所以这是安全代码:

    questions: Ember.computed('report.charts.@each.questionId', {
      get() {
        return get(this, 'report.charts').findBy('questionId', get(this, 'questionId'));
      }
    })
    

    如果你在任何其他情况下这样做,你应该等待承诺!所以在任何钩子、动作等中:

    get(this, 'report.charts').then(charts => {
      let found = charts.findBy('questionId', questionId);
      ...
    })
    

    【讨论】:

    • 即使我提出的解决方案更适合我的实际情况,我认为这个答案在全球范围内更有用。
    【解决方案2】:

    我已设法解决此问题,该问题在 Route 级别阻止应用程序返回一个仅在 hasMany 集合中的所有元素也已解决时才解决的承诺。

    我的路线中有这个:

    export default Ember.Route.extend({
      model(params) {
        return this.store.findRecord('report', params.report_id);
      }
    });
    

    现在我有了这个:

    export default Ember.Route.extend({
      model(params) {
        let reportPromise = this.store.findRecord('report', params.report_id)
    
        let promise = reportPromise.then(report => report.get('charts').then(() => report));
    
        return promise;
      }
    });
    

    由于应用程序一直在 loading 路由中,直到 promise 解决,它可以顺利运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多