Показать сообщение отдельно
  #1 (permalink)  
Старый 12.01.2016, 13:17
Кандидат Javascript-наук
Отправить личное сообщение для 12345678 Посмотреть профиль Найти все сообщения от 12345678
 
Регистрация: 03.09.2012
Сообщений: 109

KnockOut JS - плагин ko.mapping
//Первоначальные данные для заполнения карточки товара
dataFirst = "...";

var Product = function(data) {
    ...
    this.photos= ko.observableArray(data.photos);
    ...
};

var mapping = {
    create: function(options) {
        return new Product(options.data);
    }
};

var viewModel = {
    product: ko.mapping.fromJS(dataFirst), // Заполняем карточку товара данными
    getProduct: function(id) { // Получаем данные другого товара
        ...
        $.ajax({
            ...
            success: function (json) {
               ...
                var updatedData = JSON.parse(json);
                ko.mapping.fromJS(updatedData, mapping, viewModel.product); // Заполняем карточку товара новыми данными
                ...
            },
        ...
        });
    },
};

ko.applyBindings(viewModel);


Вопрос задам на примере поля photos.

Первый раз загружается товар. Этот товар не имеет значения photos поэтому
<div data-bind="if: product.photos">...</div>
ничего не показывает. Теперь по нажатию на кнопку грузится другой товар у которого есть photos, но knockout`у всё равно, он не хочет обрабатывать поле, которое изначально первый раз не было заполнено.
Если же я первый раз загружу товар с фотографиями, то потом проблем нет, есть или нет фото у товара, всё отображается верно.
Подскажите как решить эту проблему?
Ответить с цитированием