Programing

Backbone.js 컬렉션에서 fetch ()를 호출하면 어떤 이벤트가 트리거됩니까?

lottogame 2020. 11. 8. 09:07
반응형

Backbone.js 컬렉션에서 fetch ()를 호출하면 어떤 이벤트가 트리거됩니까?


내 backbone.js 응용 프로그램에서는이 Trips collection보관 유지 Trip models에 노력하고있는 LocalStorage. Trips.create(form_attributes)대한 여행을 만들고 저장하기 위해 전화를 걸 수 있습니다 Todos store.

내가 처음 내 응용 프로그램을로드 할 때, 나는 전화 Trips.fetch({ success: trips_fetch_success })trips_fetch_success쇼가 있다는 응답 수신 Trip models(가) 있음을 Trips collection보유하고 있습니다.

refreshchange이벤트를 에 바인딩하려고 시도 Trips collection했지만 이러한 이벤트가 포착되지 않아 어떤 이벤트가 Trips.fetch트리거 되는지에 대해 잘못된 생각을 가지고 있다고 생각 합니다.

내 질문 : 어떤 이벤트가 Trips.fetch트리거 되어야 합니까? 그리고 이벤트가 컬렉션 또는 각 개인에서 트리거 Trip models됩니까?


Collection.fetch()호출 reset차례로 '리셋'이벤트를 트리거 할, 성공. 컬렉션 재설정 이벤트에 대한 모든 구독자는 이벤트를 받아야합니다.

여기서 핵심은 "성공"입니다. 이 문제가 있었지만 백본이 내 오류 메시지를 조용히 삼키고 있음을 발견했습니다. 최소한에 기록하는 오류 처리기를 전달 console.log()하고 무슨 일이 일어나는지 확인합니다.

trips.fetch({error: function() { console.log(arguments); }});

(참고 : 이전 버전의 backbone.js는 "재설정"대신 "새로 고침"을 트리거합니다.)


백본 1.0을 사용하는 경우 reset 이벤트와 바인딩하려면 fetch () 호출에서 reset : true를 전달해야합니다.

trips.fetch({reset: true});

백본 1.0부터 model.fetch ()는 '동기화'를 트리거합니다. 그것이 당신이 묶어야하는 것입니다.

다음은 'sync'이벤트가 발생하는 backbone.js 소스의 관련 부분입니다.

fetch: function(options) {
  options = options ? _.clone(options) : {};
  if (options.parse === void 0) options.parse = true;
  var model = this;
  var success = options.success;
  options.success = function(resp) {
    if (!model.set(model.parse(resp, options), options)) return false;
    if (success) success(model, resp, options);

    // HERE'S THE TRIGGER!
    model.trigger('sync', model, resp, options);

  };
  wrapError(this, options);
  return this.sync('read', this, options);
},

참고 URL : https://stackoverflow.com/questions/5264247/what-events-are-triggered-when-calling-fetch-on-a-backbone-js-collection

반응형