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、ルート フックを使用する必要があると思いますafterModel。これは、ルートに入るたびに呼び出され、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 に答える