0

我正在尝试在屏幕上加载视图和图像后调整图像大小。我有这条 TAG 路线,在将 EmberJS 更新到 RC7 之后,我看到 didInsertedElement 像以前一样停止工作,它只运行一次,但每次进入视图时我都需要它运行。

所以我尝试像这样在 setupController 上运行代码:

App.TagRoute = Ember.Route.extend({
model: function(params) {
    return App.TKRPTumblr.findAll(params.tag);
},
setupController: function(controller, tag) {
    if(typeof tag === 'object'){
        controller.set('content', tag.response);
    }else{
        App.TKRPTumblr.findAll(tag)
        .then(function(data) {
            controller.set('content', data.response);       
        });
    }
    this.resizeView();
},
resizeView: function(){
    var WIDTH = 0, RATIO, IMG, IMG_HEIGHT, IMG_WIDTH, FINAL_WIDTH, SIDEBAR_WIDTH = $('#sidebar').outerWidth(), MAX_WIDTH = $(window).width() - SIDEBAR_WIDTH, MAX_HEIGHT = $(window).height() - 125;

    if($('html .post').find('img').length > 0){
        $('.post').each(function(){
            IMG = $(this).find('img');
            IMG_WIDTH = IMG.attr('width');
            IMG_HEIGHT = IMG.attr('height');
            if(IMG_WIDTH > MAX_WIDTH){
                RATIO = MAX_WIDTH / WIDTH;
                IMG.width(MAX_WIDTH).height(IMG_HEIGHT * RATIO);

            }
            if(IMG_HEIGHT > MAX_HEIGHT){
                RATIO = MAX_HEIGHT / IMG_HEIGHT;
                IMG.width(IMG_WIDTH * RATIO).height(MAX_HEIGHT);
            }
            WIDTH += IMG.width();
        });
            if(isNaN(WIDTH)){
                WIDTH = $('.post img').width() + SIDEBAR_WIDTH;
                $('body').children('.ember-view').innerWidth(WIDTH);
            }else{
                WIDTH += SIDEBAR_WIDTH + 100;
                $('body').children('.ember-view').innerWidth(WIDTH);
            }
            var evt = document.createEvent('Event');
            evt.initEvent('_htmlReady', true, true);
            document.dispatchEvent(evt);
    }else{
        Ember.run.next(this, function() {
            this.resizeView();
        });
    }
}

});

不幸的是,它效果不佳:/我现在不知道该怎么做:((有人可以帮助我吗?

4

1 回答 1

1

它只运行一次,但我每次进入视图时都需要它运行。

如果您依赖model钩子返回的数据,那么我想您应该使用 routesafterModel钩子,每次输入路由时都会调用它并model解决。

App.TagRoute = Ember.Route.extend({
  afterModel: function() {
    this.resizeView();
  }
  ...
});

但是,如果您只想在每次输入路由时调用您的函数,无论模型是否解析,那么使用路由activate钩子也是一种选择:

App.TagRoute = Ember.Route.extend({
  activate: function() {
    this.resizeView();
  }
  ...
});

希望能帮助到你。

于 2013-08-26T21:56:56.097 回答