1

暦日モデルがあり、暦日ごとにイベントのコレクションがあります。

その日にイベントがある場合、コレクションは更新されますが、問題ありません。新しいイベントが表示されます。ただし、その日にイベントがない場合、コレクションは空にならず、コレクションは最後のモデルであった日 (ユーザーが翌日に行った場合は前日) からのイベントを表示します。

モデルのフェッチ成功でコレクションが作成されているので、非同期の問題ではないはずです。

私のモデルは

Myapp.Models.CalDay = Backbone.Model.extend({
    url:'カレンダー',
    初期化:関数(){

        this.get_cal();
        }、
    get_cal: 関数(){

        // カレンダーが存在しないため、初めて、
            Myapp.CurrentCal = これ;
            Myapp.cal.set({'date': new Date(),'draw_slider': true,'put_date':'today'});
            Myapp.CurrentCal.Events = new Myapp.Collections.DayEvents();
            this.bind('change:date',this.fetch_cal);
            this.fetch_cal();
        }

        Myapp.CurrentCal.bind("fetched",this.get_view);
    }、

    fetch_cal: 関数(){

        console.log(Myapp.CurrentCal.Events);

        Myapp.Calendar.fetch({
        成功: 関数 (応答) {

            Myapp.CurrentCal.Events.reset(response.attributes.calendar_events);
            Myapp.CurrentCal.trigger("取得");
                }、
          エラー: 関数() {
              alert('カレンダー取得エラー');
            }
        });


    }、
    get_view: 関数(){
          console.log(Myapp.CurrentCal.Events);
          new Myapp.Views.CalendarDay();

    }
});
4

2 に答える 2

0

ドキュメントが言うように、引数としてresetモデルを渡さずに呼び出すと、空になりますcollection。したがって、モデルを引数として渡さずに呼び出すか、サーバーから空の配列を返す必要daysがないすべての場所で、あなたが言ったように。eventsreset

および/または、コールバックで応答を確認successし、条件呼び出しに基づいて次のいずれかを行うことができます

Myapp.CurrentCal.Events.reset(response.attributes.calendar_events);

また

Myapp.CurrentCal.Events.reset();
于 2012-11-06T05:14:02.850 に答える
0

remove()次の日のイベントをレンダリングする前に(まあ、前に提案したいのですが)ビュー を呼び出す必要があります。

これは、イベントで新しい日をレンダリングする場合、ビューのコンテナーがこれらのイベントで上書きされるため、問題の原因にはなりません。ただし、翌日に新しいイベントが含まれていない場合は、何も書き込まれないため、前日のイベントが表示されたままになります

ビューに close メソッドを作成し、ビューでremove()関数を実行するとともに、そのビューに関連付けられているバインディングをクリーンアップすることを検討してください。

私はconfig/backone.coffeeバックボーンアプリ用に作成し、close()これを達成するための関数を作成しています:

class Backbone.View extends Backbone.View
  close: ->
    @beforeClose() if @beforeClose?
    @remove()
    @unbind(null,null,this)
于 2012-11-05T04:49:11.800 に答える