KnockoutJS -Обновление ViewModel/Mapping Plugin

Как я могу обновить полную модель представления?

  1. При загрузке страницы я получаю модель и преобразую ее с помощью ko.mapping.fromJS(myObject)в модель представления.
  2. Если пользователь нажимает кнопку, я хочу получать обновленные данные с сервера
  3. Теперь я хочу применить эти обновления

Если я использую ko.applyBindings(viewModel);, он отлично обновляет пользовательский интерфейс. Но он снова добавляет те же самые события. Итак, если пользователь нажимает кнопку, событие запускается дважды, в третий раз и так далее.

Вопрос

Каков хороший способ обновить мой полный viewModel. Может быть, я удалю привязки и применю их снова? (как это сделать ).

Образец

var viewModel;

function update() 
{
    $.ajax({
        url: '...',
        type: "GET",
        statusCode: {
            200: function (data) {
                 viewModel = ko.mapping.fromJS(data);
                 ko.applyBindings(viewModel);
            }
        }
    });    
}

// first call after page load
update();

// user click
$("#myButton").click(function() {
    update(); 
});

Обновление

Steve Greatrex Could you post your custom binding implementation?

ko.bindingHandlers.domBinding = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
};
9
задан dknaack 2 August 2012 в 20:27
поделиться