당신은 사용할 수 autoSync
과 Backbone.Firebase.Collection
를 사용하여 개별 항목을 업데이트 할 수 있습니다. 개별 항목을 다시 렌더링하려면 항목에서 변경 이벤트를 발생시킬 때들을 필요가 있습니다. 이 개념은 Firebase 문서의 BackboneFire 빠른 시작에 나와 있습니다.
그러나 빠른 설명에 Backbone.Firebase.Model
과 Backbone.Firebase.Collection
을 섞을 수는 없습니다.
도도 모델 아래의 샘플에서 & 컬렉션
는 일반 Backbone.Model
가 Backbone.Firebase.Collection
에서 어떻게 사용되고 있는지 확인할 수 있습니다. 컬렉션의 기본값은 autoSync
입니다.
// A simple todo model
var Todo = Backbone.Model.extend({
defaults: { title: "New Todo" }
});
// Create a Firebase collection and set the 'firebase' property
// to the URL of your Firebase
var TodoCollection = Backbone.Firebase.Collection.extend({
model: Todo,
url: "https://<your-firebase>.firebaseio.com"
});
도도보기
아래의 샘플은 개인 할 일 항목에 대한 도면이다. initialize
함수 안에서 listenTo
메서드는 모델의 change
이벤트를 수신하는 데 사용됩니다. change
이벤트는 모델이 원격 또는 로컬로 업데이트 될 때마다 (변경 사항을 원격으로 유지함) 해고됩니다.
// A view for an individual todo item
var TodoView = Backbone.View.extend({
tagName: "li",
template: _.template("<%= title %>"),
initialize: function() {
// whenever the model changes trigger a re-render of the single view
this.listenTo(this.model, "change", this.render);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
});
목록을 쉽게뿐만 아니라 렌더링 할 수있는 목록을 설정 TodoView
와
을 렌더링합니다. 아래 AppView
의 initialize
기능에서 collection
을 듣고 TodoCollection
이됩니다. 항목이 콜렉션에 추가 될 때마다 addOne
기능이 실행됩니다. addOne
함수는 단순히 새 TodoView
을 페이지에 추가합니다.
// The view for the entire application
var AppView = Backbone.View.extend({
el: $('#todoapp'),
initialize: function() {
this.list = this.$("#todo-list"); // the list to append to
// by listening to when the collection changes we
// can add new items in realtime
this.listenTo(this.collection, 'add', this.addOne);
},
addOne: function(todo) {
var view = new TodoView({model: todo});
this.list.append(view.render().el);
}
});
데이비드. 나는 처음에 그것을 잘못 설정했다. 내 솔루션은 약간 다릅니다. 먼저'sync' 이벤트를 한 번 듣고 컬렉션을 반복하고 항목을 렌더링합니다. 각 항목보기에 대해 언급 한대로'change' 이벤트를 수신합니다. 추가 및 제거를 처리하기 위해 목록보기 및 항목보기에서 분리 된 두 개의 핸들러를 각각 사용합니다. 기본적으로 키는 각 항목에서'change','remove','collection'에서'sync'를 조합 한 것입니다. 제안 사항이 있으십니까? –
맞아요. 작동하지 않는 것이 있습니까? –
그것은 완벽하게 작동합니다! 감사! –