Сопоставленный массив Knockjs не привязан к родительскому объекту

Я использую Knockoutjs.mapping для сопоставления существующего возврата объекта, если сервер - это JSON.

Объект аналогичен редактору корзины example, главное отличие в товарах уже есть.

Вот моя попытка http://jsfiddle.net/9ej3r/

отображение является прямым:

var mapping = {
            'Items': {
                create: function(options) {
                    return new InvoiceItem(options.data);
                },
                key: function(data){
                    return ko.utils.unwrapObservable(data.ID);
                }
            }
        };

когда я нажимаю удалить, я получаю сообщение об ошибке: "this.Items in undefined"

что я здесь делаю неправильно? как адаптировать пример редактора корзины для работы с существующими строками?


person Amr Ellafy    schedule 01.11.2012    source источник
comment
Добавьте свою модель представления и html в скрипку.   -  person Artem Vyshniakov    schedule 01.11.2012
comment
Как мы должны сказать вам, что не так с вашей функцией удаления, если вы ее не публикуете?   -  person Kyeotic    schedule 01.11.2012
comment
извините, я исправил ссылку jsFiddle   -  person Amr Ellafy    schedule 02.11.2012


Ответы (1)


Вас укусил тот факт, как this работает в javascript.

Потому что, когда ваш метод removeItem вызывается, this будет фактическим элементом, например. InvoiceItem, а не Invoice, поэтому вам нужно зафиксировать «другое» this в переменной и использовать ее в своей функции для доступа к Invoice.

Итак, ваш removeItem должен выглядеть так:

var self = this;

this.removeItem = function (item) { 
   self.Items.remove(item);
}

См. также эту демонстрацию.

Обратите внимание, что пример редактора корзины также использует этот прием в методе removeLine.

var self = this;
self.removeLine = function(line) { self.lines.remove(line) };
person nemesv    schedule 02.11.2012