2012-02-28 2 views
3

Я просто попытался принять backbone.js в свой проект с помощью примера todo. В моем файле app.js я пытаюсь создать экземпляр своих представлений/моделей/коллекций и т. Д., Но я пытаюсь получить сообщение об ошибке. Msg: приложение не определено в 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, код ожидает, что пространство имен уже определено как что-то - обычно это объект в большинстве случаев, который я видел. Без этой базовой части код будет просто ровным - предполагается, что вы пытаетесь сделать эквивалент строительства замка, начиная с крыши.

Смежные вопросы