【问题标题】:Emberjs - Knowing when model is rendered on templateEmberjs - 知道模型何时在模板上呈现
【发布时间】:2014-05-23 23:38:51
【问题描述】:

是否可以知道(使用最好的事件处理程序)模型中的数据何时在模板上呈现,以及何时更新?

我将以此为例:

App.ApplicationRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        var promise = myNewModel();
        this._super(controller, promise);
    }
})

我正在更新我的 setupController 中的模式,因为我不希望用户卡在空白页面上。

当所有数据都在模板上完成渲染时,有没有办法获取该事件,在我的情况下,当我更新模型时?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    当您到达setupController 时,模型必须是真实的,而不是承诺。在这里将模型设置为承诺是根本行不通的。你可以试试这样的:

    setupController: function(controller, model) {
        myNewModel().then(function(model) {
            controller.set('model', model);
        });
    }
    

    换句话说,这不是您要查找的事件,而是您的 newModel 呼叫完成。

    【讨论】:

    • 它工作得非常好,但是当我的新模型实际渲染时,我需要从视图中修改 DOM。
    • 嗯,在视图上应该是didInsertElement。
    【解决方案2】:

    您可能应该使用加载子状态。 Refer docs here

    您需要从 route#model 钩子中获取模型并返回一个承诺。加载状态将被触发,直到 promise 解决。在 promise 解决之前,您可以显示加载模板。

    App.ApplicationRoute = Ember.Route.extend({
     model: function() {
      var promise = myNewModel();
      return promise; 
     }
    });
    

    Refer @machty's jsbin 和相关的PR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多