Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   KnockOut JS - плагин ko.mapping (https://javascript.ru/forum/library-toolkit-framework/60634-knockout-js-plagin-ko-mapping.html)

12345678 12.01.2016 13:17

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`у всё равно, он не хочет обрабатывать поле, которое изначально первый раз не было заполнено.
Если же я первый раз загружу товар с фотографиями, то потом проблем нет, есть или нет фото у товара, всё отображается верно.
Подскажите как решить эту проблему?:help:


Часовой пояс GMT +3, время: 14:32.