Как инициировать событие из дочернего представления в родительское представление в backbonejs и requirejs

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

$(this.el).trigger('added', this.model);

событие родительского просмотра

events: {
            "added": "addNewAttribute"
        },
    addNewAttribute: function (model) {
        console.log(model);
        this.collection.add(model);
        console.log(this.collection);
    }

console.log возвращает неопределенное значение. может кто-нибудь сообщить мне, как передать модель обратно в родительский вид?

Спасибо


person Kishore    schedule 15.06.2012    source источник


Ответы (2)


Я могу ошибаться, но я предполагаю, что дочернее представление не выполняло привязку к функции, содержащей этот код:

$(this.el).trigger('added', this.model);

В результате, когда вы попадаете в функцию, в которой находится код, «это» указывает не на дочернее представление, а на какой-то объект DOM или что-то в этом роде. Тогда this.model не указывает на то, что вы ожидаете.

Например:

initialize : function () {
  _.bindAll(this, "addFunction");
}

addFunction : function () {
  $(this.el).trigger('added', this.model);
}
person John Munsch    schedule 15.06.2012
comment
Привет, Джон, когда я распечатываю console.log(model); в функции addNewAttribute я получаю что-то вроде этого f.Event вместо фактической модели, что, по вашему мнению, мне не хватает? я поместил _bindAll в свой код, как вы упомянули. - person Kishore; 16.06.2012
comment
@Kishore Я думаю, было бы очень полезно, если бы мы могли увидеть больше кода клиентского представления, чтобы понять, что может быть не так. - person John Munsch; 16.06.2012

Только что столкнулся с такой же проблемой!

Дело в том, что родительская функция принимает в качестве первого параметра событие, а триггерная функция передает переменные в виде массива. поэтому код должен быть таким:

$(this.el).trigger('added', [this.model]);

событие родительского просмотра:

events: {
    "added": "addNewAttribute"
},
addNewAttribute: function (event,model) {
    console.log(model);
    this.collection.add(model);
    console.log(this.collection);
}

это сработало для меня.

person Michael    schedule 24.04.2013