#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Я разрабатываю приложение, частично основанное на Backbone.js пример приложения todo. Все работало отлично, пока я не попытался добавить функцию редактирования. То, что я обнаружил, — это какое-то странное поведение.
У меня есть какая-то форма, которая создает новый объект модели и добавляет его в коллекцию. Когда создается новая модель (привязанная к событию «добавить»), также создается новое представление и добавляется в dom. Точно так же, как в том приложении todo, и это работает.
Что ж, теперь я пытаюсь добавить функцию редактирования. Я создаю входные элементы в методе view object и пытаюсь «отправить» изменения. Я пытаюсь сделать это сначала, просто изменив атрибуты модели с помощью view.model.set -method. Это работает, но запускается какое-то странное событие. Это могло бы быть прекрасно, так как я хотел бы снова отображать вид при изменении модели.
Основная проблема: на мой взгляд (рабочий объект), существует метод рендеринга, содержащий эту строку отладки: ‘console.log(this)’. Когда объект представления создается формой в первый раз, эта строка выводит правильный объект. Когда я пытаюсь отредактировать модель и присвоить ей новое значение, debug выводит совершенно другой объект. Это не работает, и рендеринг завершается с ошибкой.
Я надеюсь, что этих примеров достаточно.
Основной вид:
this.myCollection.bind('add', function(model){
var myView= new myViewRow({
model: model
});
$("#container").find('tbody').append(myView.render().el);
}, this);
и на мой взгляд:
render: function() {
console.log(this);
var data = this.getAsArray();
$(this.el).html(content);
return this;
}
Есть какие-нибудь советы, что я делаю не так? Какой метод набора событий запускает и почему мой метод рендеринга после этого находится в неправильном объекте?
Комментарии:
1. Не могли бы вы опубликовать полные просмотры?
Ответ №1:
Попробуйте это в методе инициализации вашего магистрального представления:
_.bindAll(this, "render");
Смотрите Backbone.js Часто задаваемые вопросы для объяснения этого. В магистральных представлениях обычной практикой является проверка того, что this
переменная указывает на объект View, определенный в текущей области видимости функции, как обычно хотелось бы, чтобы это делалось.
Ответ №2:
Когда вы привязываетесь для прослушивания события изменения, вы должны привязать функцию прослушивателя к текущему представлению http://documentcloud.github.com/backbone/#FAQ-this
Комментарии:
1. Это хороший момент и, вероятно, имеет какое-то отношение к моей проблеме. В любом случае, на мой взгляд, у меня есть эта строка для инициализации метода: this.model.bind(‘change’, this.render, this)