Ember JS在新数据加载之前将旧数据暂时可见

时间:2014-01-23 14:02:35

标签: javascript ember.js

我的问题是,当用户转到我的路由簿/:id /:版本时,需要一些时间来提取JSON,并且快速返回它仍会呈现旧数据,然后将其替换为新数据。 / p>

这是我的路线:

App.BookRoute = Ember.Route.extend({
    setupController: function (controller, model) {

        // This gets the entire JSON for the single book
        Ember.$.getJSON('/book?id=' + model.id + '&version=' + model.version,
            function (data) {

                // Set the json to the model
                controller.set('model', data);

            });

    }
});

这是我的路由器:

App.Router.map(function () {
    // Homepage (All the books)
    this.resource('index', { path: '/' });


    // Single Book view
    this.resource('book', { path: '/book/:id/:version' });

});

例如,在第一次访问#/ book / 2/1时,它运行正常。下次访问另一本书#/ book / 3/1时,它会快速显示#/ book / 2/1的数据(html模板呈现),然后加载#/ book / 3/1的数据

用户离开后如何清除视图?或者如何使其不显示路线/视图中先前加载的书籍。

感谢。

修改(添加了可能的相关问题):

此外,我还有另一个可能相关或不相关的问题,但在将实际HTML呈现给DOM之前调用了didInsertElement事件。我认为在将HTML呈现给DOM之后调用此方法。

这是观点:

App.BookView = Ember.View.extend({
    didInsertElement: function () {
        console.log('inside didInsertElement');
    }
});

1 个答案:

答案 0 :(得分:0)

听起来好像是因为你在设置控制器挂钩中这样做了。获取这样的数据应该在模型钩子中完成。本指南告诉您如何操作,请参阅“动态路线”部分:http://emberjs.com/guides/routing/specifying-a-routes-model/

尝试这样做

App.Router.map(function () {
// Homepage (All the books)
   this.resource('index', { path: '/' });


// Single Book view
   this.resource('book', { path: '/book/:book_id/:version' });

});

App.BookRoute = Ember.Route.extend({
  model: function(params) {
  return Ember.$.getJSON('/book?id=' + params.book_id + '&version=' + params.version);
 }
});

我实际上认为:id作为param是保留的,因为它建议做:book_id

之类的事情