-1

새 컬렉션으로 내보기를 만듭니다.켜기 및 끄기 이벤트가 제대로 작동하지 않습니다.

내가 추가하고 화재 동기화 이벤트 :

this.mapDetailsCOllection.on('add', self.onAddElement, self); 
this.mapDetailsCOllection.on('sync', self.onSync, self); 

가져 오기 전에 내가 할 :

this.mapDetailsCOllection.on('add', self.onAddElement, self); 

그러나도 :

this.mapDetailsCOllection.off("add"); 
this.mapDetailsCOllection.fetch(); 

을 그리고 내 동기 콜백에서 확인을 때 가져 내가 추가 이벤트를 연기하면 매번 가져올 때마다 이벤트 콜백 함수를 추가합니다. 이를 바탕으로

+0

은 [최소한의 완전하고 검증 예]를주십시오 (http://stackoverflow.com/help/mcve) . –

답변

1

응용 프로그램을 어떻게 구성했는지에 대한 컨텍스트가 없기 때문에 다음을 제안 할 것입니다 (Backbone.js는 많은 로프를 제공하기 때문에 훌륭하지만 응용 프로그램을 어떻게 크게 디자인 할 수 있습니까? 동기화 솔루션을 구현하는 방법을 변경하십시오.) 보기, 수집 및 모델 코드를 어떻게 구성했는지에 대해 더 많이 나눌 수 있다면이 게시물을 조정, 확장 또는 명확히 해 주시면 기쁘게 생각합니다. 코드에서

, add 각각의 새 항목을 트리거하기 때문에 내가 (대신 add 이벤트의 update 이벤트를 수신 할은/항목의 번호가 추가 된 후 를 트리거 update에 비해 컬렉션에 추가 제거 컬렉션에서). 그런 다음 add 이벤트에 대해 변경을 켜고 끄고 이벤트를 제거하고 가져 오기/동기화주기에 대해 리스너를 끄고 켜는 대신보기가 Collection.reset 이벤트를 수신하도록하십시오.

내가 과거에 성공적보기 디자인 패턴의이 유형을 사용했습니다 :

var _ = require('lodash'); 
var DocumentRow = Backbone.View.extend({ 
    events: { 
    "click #someEl": "open" 
    }, 

    clean: function() { 
    // cleans up event bindings to prevent memory leaks 
    }, 

    initialize: function(options) { 
    _.bindAll(this, [ 
     'initialize', 
     'open', 
     'render', 
     'clean' 
    ]); 

    options = options || {}; 
    this.collection = options.collection ? options.collection : SomeCollection; 
    this.listenTo(this.collection, "reset", this.render); 
    }, 

    open: function(item) { 
    ... 
    }, 

    render: function() { 
    ... 
    } 

}); 
+0

왜'_.bindAll'입니까?이 경우에'this.listenTo'와'events' 콜백은 자동으로 뷰 컨텍스트를 갖습니다. 'options.collection' 또한 초기화 전에 생성자에서'this.collection'으로 설정됩니다. –

+0

안내 Emile에게 감사드립니다. 백본으로 프로덕션 앱을 개발 한 지 수년이 지났습니다. 그것들은 백본으로 마지막으로 작업했을 때 존재하지 않았던 변화입니다. –

+1

충분히 'listenTo'가 2012 년 12 월 13 일 v0.9.9에 추가되었지만 0.1.0에'events' 및'collection' 옵션이있었습니다. 여전히'_.bindAll', 왜'view.render'를 콜백으로 전달했는지 궁금하지만 여기서는 관련이 없습니다. –

0

:

가져 오기의 동작이 가능한 세트를 옵션을 사용하여 사용자 정의 할 수 있습니다

. 예를 들어, 모든 새 모델에 대한 이벤트 을 "추가"점점 컬렉션을 가져, 모든에 대해 "변경"이벤트는 아무것도 제거하지 않고, 모델을 기존의 변경 :

collection.fetch({remove: false}) 

collection.set(models, [options])이를 :

해당 "제거", "추가"및 "변화"이벤트가 해고 의이 모든 일이 같은

. 컬렉션에있는 터치 된 모델을 반환합니다. 비헤이비어를 맞춤 설정하려면 {add : false}, {remove : false} 또는 {merge : false} 옵션을 사용하여 비헤이비어를 사용 중지 할 수 있습니다.

당신은

collection.fetch({add: false}) 

add 이벤트를 트리거 피하기 위해 전달할 수 있습니다.