Модель Backbone.js для просмотра соединения
Я новичок Backbone.js. Я просто играл с ним. Я хотел бы знать, связана ли модель с представлением. В представленном todos примере, который я вижу в методе addOne, создается новый вид и ассоциируется с недавно созданной моделью и прилагается.
window.AppView = Backbone.View.extend({
// view code
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
}
}
Когда я попытался сделать подобное, я получил сообщение об ошибке: "Метод привязки не найден на undefined".
window.TodoView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render', 'close');
this.model.bind('change', this.render); // I got the error at this place.
this.model.view = this;
}
});
Чтобы решить эту проблему, мне пришлось передать вновь созданную модель в качестве параметра для конструктора представления, и мне пришлось сделать this.model = task
inorder, чтобы связать его.
window.TodoView = Backbone.View.extend({
initialize: function(task) {
_.bindAll(this, 'render', 'close');
this.model = task
this.model.bind('change', this.render);// now there is no error
this.model.view = this;
}
});
window.AppView = Backbone.View.extend({
insertTask:function(){
var newTask, newTaskView;
newTask = new Task(JSON.parse(xhr));
Tasks.create(newTask);
newTaskView = new TaskView({ model: newTask });
$("#todo_list").append(newTaskView.render().el);
this.input.val('');
}
});
Но пример todos, не имеет ничего подобного. Как неявно используется новая модель, связанная с новым представлением в примере todos?
Спасибо
Ответы
Ответ 1
Он не подразумевается вообще, он явно указан в этой строке прямо здесь:
var view = new TodoView({model: todo});
Это создает новое представление TodoView
и устанавливает его свойство model
только параметру функции addOne
(todo
, который является моделью).
Всякий раз, когда новая коллекция добавляется в коллекцию Todos
, метод addOne
вызывается с новой моделью как параметр.
Todos.bind('add', this.addOne);
Затем в addOne
для этой модели создается новое представление, а отношение - это набор экспликации через {model: todo}
. Я подозреваю, что этого не хватает в вашей версии кода.
То, что вы пытаетесь сделать, это связать представление и модель в функции init, и это прекрасно, но вы сами по себе, если вы это сделаете, что означает, что вам нужно настроить модель ↔ самостоятельно посмотреть (что вы решили, передав модель в качестве параметра функции инициализации представления).