Подтвердить что ты не робот

Модель 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?

Спасибо

4b9b3361

Ответ 1

Он не подразумевается вообще, он явно указан в этой строке прямо здесь:

var view = new TodoView({model: todo});

Это создает новое представление TodoView и устанавливает его свойство model только параметру функции addOne (todo, который является моделью).

Всякий раз, когда новая коллекция добавляется в коллекцию Todos, метод addOne вызывается с новой моделью как параметр.

Todos.bind('add', this.addOne);

Затем в addOne для этой модели создается новое представление, а отношение - это набор экспликации через {model: todo}. Я подозреваю, что этого не хватает в вашей версии кода.

То, что вы пытаетесь сделать, это связать представление и модель в функции init, и это прекрасно, но вы сами по себе, если вы это сделаете, что означает, что вам нужно настроить модель ↔ самостоятельно посмотреть (что вы решили, передав модель в качестве параметра функции инициализации представления).