2012-02-28 2 views
3

todo 예제로 내 프로젝트에 backbone.js를 채택하려고했습니다. 내 app.js 파일에서 내보기/모델/컬렉션 등을 인스턴스화하려고하지만 오류 메시지가 표시됩니다. app은 TodoList에 정의되어 있지 않습니다.다른 파일의 모델 /보기

HTML :

<head> 

<script type="text/javascript" src="js/json2.js"></script> 
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="js/underscore-min.js"></script> 
<script type="text/javascript" src="js/backbone-min.js"></script> 
<script type="text/javascript" src="js/backbone-localstorage.js"></script> 

<script type="text/javascript" src="js/models/models.js"></script> 
<script type="text/javascript" src="js/collections/collections.js"></script> 
<script type="text/javascript" src="js/views/views.js"></script> 
<script type="text/javascript" src="js/views/app.js"></script> 

<script type="text/javascript" src="js/app.js"></script> 

app.js (내 응용 프로그램에 대한 루트) :

var app = { 
    models:{}, 
    collections:{}, 
    views:{} 
}; 

    jQuery(function($) { 

     var Todos = new app.collections.TodoList; 
     var test = new Todo; 
     var test2 = new TodoView; 
     var appView = new AppView({}); 

    }); 

collections.js :

app.collections.TodoList = Backbone.Collection.extend({ 

model: Todo, 

localStorage: new Store("todos"), 

done: function() { 
    return this.filter(function(todo) { 
     return todo.get('done'); 
    }); 
}, 

remaining: function() { 
    return this.without.apply(this, this.done()); 
}, 
nextOrder: function() { 
    if (!this.length) return 1; 
    return this.last().get('order') + 1; 
}, 

comparator: function(todo) { 
    return todo.get('order'); 
} 

});

답변

5

준비가되기 전에 네임 스페이스를 사용하려고합니다. 두 가지 옵션. 먼저 'app.js'를 먼저 가지고 있지만 초기화 코드를 꺼내서 절대적으로 마지막에로드 된 'bootstrap.js'에 넣으십시오. 두 번째 옵션과 일반적으로 많이 사용하는 옵션은 파일에 필요하지 않은 네임 스페이스를 정의합니다. 예 :

var app = app || {}; 
app.collection = app.collection || {}; 

기본적으로 코드는 하나씩로드됩니다. namespace.subspace라고 할 때, 코드는 네임 스페이스가 이미 무언가 (일반적으로 내가 본 대부분의 경우 객체)로 정의되었다고 기대합니다. 기본 조각이 없으면 코드가 단순하게 평평해질 것입니다. 지붕으로 시작하는 성을 건축하는 것과 동등한 작업을하려는 것으로 가정합니다.