나는 언제 어디에서 컬렉션을 인스턴스화하고 백본 응용 프로그램에서 가져올 지에 대해 약간 의아해합니다.Backbone.js 언제 어디서 수집 데이터를 가져와야합니까?
지금까지 몇 가지 방법으로 작업 해 보았습니다. 매우 간단한 CRUD 연락처 관리자 앱에서 일하고있었습니다. Im은 어지럽 죠. 그러나 몇 가지 규칙과 'gotchas'가 있다고 확신합니다. 알지 못한다.
이것들은 제가 보았을 때나 작동 시키거나, 일종의 'work'옵션입니다 :) 옵션 4는 개념적으로 앞으로 나아갈 것 같습니다. 그러나 나는 그것을 어떻게 망쳐 놓고 있습니다.
나쁜 생각 : 1) 라우터로 무엇인가를하기 전에 새로운 컬렉션을 인스턴스화하고 fetch를 호출 한 다음 app 준비된 뷰를 doc 준비 문으로 시작합니다.
이 일// Create an Instance of the collection
App.contacts = new App.Collections.Contacts;
App.contacts.fetch({update: true, remove: false}).then(function() {
new App.Views.App({ collection : App.contacts });
});
- -하지만 앱에서 여러 컬렉션을 가지고 있다면 그 정말 올바른 방법은 아닌 것 같아, 나는이 아이디어가 실패 생각합니다.
나쁜 생각 : 2) 내가 라우터를 사용하기 시작했을 때, 나는 라우터 초기화 방법에서도 위와 같은 효과가 있다고 생각했지만 같은 문제를 안고 있다고 생각합니다.
나쁜 생각 : 3) 나는 여러 가지 장소에서 읽는 것이 좋지 않은 콜렉션 init 메소드에서 가져 오는 것을 시도했다. 이것은 나쁜 생각이었다.
좋은 아이디어 (?) : 그러나 나는 할 수 없다. : 4) 나는이 뷰를 인스턴스화 할 때 콜렉션에 대한 데이터를 얻는 것이 합리적이라고 생각했다. 컬렉션 및 작업 컬렉션은 라우터에서 뷰를 인스턴스화 할 때마다 서버에서 가져온 것일뿐입니다. 이것은 나에게 승리 공식처럼 보입니다. 그러나 이것을 View 초기화 또는 렌더링 메소드에 넣으려고 할 때 내 this.collection.on('add', this.addOne, this);
은 정의되지 않은 .on을 호출 할 수 없습니다. (NB : 성공 함수에 넣으려고했습니다.)
이게 내 머리를 쓰고있어.
건배.
EDIT : 추가 코드로 아래에서 설명 할 두 가지 부하를 진단 할 수 있습니다. 내 라우터에
var ViewManager = {
currentView : null,
showView : function(view) {
if (this.currentView !== null && this.currentView.cid != view.cid) {
this.currentView.remove();
}
this.currentView = view;
return view;
}
}
: 내 라우터 파일에서
나는이 유틸리티 OBJ를 사용하고 난 내 길
list: function() {
console.log('backbone loading list route');
var AllContactsView = new App.Views.Contacts({ //init method runs now
collection : App.contacts
});
ViewManager.showView(AllContactsView);
},
내 컬렉션에서이 메소드를 호출하고있어
App.Collections.Contacts = Backbone.Collection.extend({
model: App.Models.Contact,
url: 'contacts',
});
내보기
내 앱에서JS
// Run App
jQuery(document).ready(function($) {
// Create an Instance of the collection
App.contacts = new App.Collections.Contacts;
// Init BB Router
new App.Router.Route;
Backbone.history.start(); // Kick it all off.
});
위의 코드에서 컬렉션이 두 번 호출되는 이유를 볼 수 없습니다. 'App.Collections.Contacts' 코드를 추가 할 수 있습니까? –
완료,하지만 그게 다라고 생각하지 않습니다. – pushplaybang