2012-01-21 6 views
1

Я новичок в Backbone.js, и пытается понять что-то, у меня есть следующие объекты в настоящее время:
TodoItem вид модели
TodoItemView
Коллекция TodoCollectionBackbone.js моделирования

Я добавляю кучу TodoItems в TodoCollection, который создает TodoItemViews для каждого, это отображает основной список предметов todo. Теперь, когда я нажимаю на элемент todo, я хочу открыть новую вкладку со всеми данными для этого объекта todo, в форме (то есть редактируемой) и кнопке «Сохранить».

Я пытаюсь выяснить, как эта модель .. если TodoItemView есть событие щелчка, который:

  1. открывает вкладку и заполняет всю информацию и как-то связывает события с этой новой вкладки к функциям внутри него? (Почти наверняка неправильно)
  2. создать новую EditableTodoItemView, чьи визуализации открывает новую вкладку, нажмите на TodoItemView создает новый EditableTodoItemView, а затем забывает об этом (лучше, я думаю)

Я предполагая, что EditableTodoItemView должен ссылаться на исходную модель, т. е. TodoItem должен совместно использоваться EditableTodoItemView и TodoItemView. Не нужно создавать новую коллекцию, EditableTodoItemView вызывает backbone.sync(), когда пользователь нажимает save.

Аналогично, я предполагаю, что когда я создаю новый TodoItem, я вставляю его в TodoCollection, который создает для него TodoItemView и, возможно, автоматически создает EditableTodoItemView, если элемент является новым (например, имеет данные по умолчанию).

Имеет ли это смысл? О чем еще я должен думать?

+0

Вы пытались выполнить пример приложения To-Do на веб-сайте backbonejs? –

+0

Вы имеете в виду открытие на новой вкладке браузера ?! Javascript, запущенный на странице для новой вкладки, не будет иметь доступа ни к одному из объектов Backbone.js, которые вы создали на другой странице. ВАМ создаются виды, не так ли? Насколько я знаю, автоматическое создание любого вида, встроенного в Backbone.js, не существует. – erturne

+0

@erturne: нет, я имел в виду вкладку jquery. –

ответ

0

Самый простой способ переключения между несколькими видами - это Backbone.Router. Вы можете использовать его как это:

var TodoRouter = Backbone.Router.extend({ 
    routes: { 
    "edit/:id": "edit", // matches http://yourapp.com/#edit/1234 
    ".*":  "index", // matches http://yourapp.com/#everything-else 
    }, 

    edit: function(id) { 
    item = TodoCollection.get(id); 
    this.view = EditableTodoItemView({model: item}); 
    $("#main").html(this.view.render().el); 
    }, 

    index: function() { 
    //... 
    } 

}); 

Тогда просто запустить window.router = new TodoRouter; Backbone.history.start(); где вы запускаете приложение. Убедитесь, что ваш TodoCollection извлечен, прежде чем запускать его. Вы можете использовать TodoCollection.bind("reset", _.once(function(){Backbone.history.start()}));.

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