2

チャットがあり、新しいメッセージが来ると下にスクロールする必要があります。これはうまくいきます。

しかし、アプリがロードされると、メッセージの一部 (約 100 個) が ArrayController の「コンテンツ」を設定することによって事前にロードされるため、下にスクロールすると 100 回呼び出され、これは良くありません。データの最初の大きな部分に対してスクロールを一度だけ実行する正しい方法は何ですか?

ここにいくつかのコードがありますhttp://jsfiddle.net/agentcooper/W6Bhs/

4

2 に答える 2

2

scrollコンテンツが変更されたときに起動される関数を作成できます。http://jsfiddle.net/pangratz666/zZ5Ccを参照してください。したがって、基本的には、単一のメッセージを保持するビューからすべてのメッセージを保持するビューへのスクロール動作をプルアップします。

ハンドルバー

<script type="text/x-handlebars">
  {{#view App.MessagesView class="message-list" messagesBinding="App.messages" }}
  <ul class="nav nav-list">
  {{#each messages}}
    {{#view App.MessageView contentBinding="this" tagName="li"}}
      {{unbound content.from}}: {{unbound content.message}}
    {{/view}}
  {{/each}}
  </ul>
  {{/view}}
</script>

JavaScript

App.MessagesView = Ember.View.extend({
    didInsertElement: function() {
        this.scroll();
    },

    messagesChanged: function() {
        var that = this;
        // invoke this code in the next RunLoop, when changes are made to DOM
        Ember.run.next(function() {
            that.scroll();
        });
    }.observes('messages.@each'),

    scroll: function() {
        console.log('scroll');
        var el = this.$();
        el.scrollTop(el.prop('scrollHeight'));
    }
});
于 2012-04-06T13:19:51.177 に答える
0

あなたのデータはどこから来ますか?

ember-dataを使用していた場合、フラグModelArrayを介してロードの完了を確認できますisLoaded...

別の答えを見ることができます:https://stackoverflow.com/a/10031377/90741

于 2012-04-06T13:14:40.137 に答える