35 lines
1.3 KiB
JavaScript
Vendored
35 lines
1.3 KiB
JavaScript
Vendored
/*
|
|
* Extension to the knockoutjs mapping plugin
|
|
* http://github.com/janhartigan/knockout-mapping-updatedata
|
|
* Requires KnockoutJS and the mapping plugin
|
|
*
|
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
* Jan Hartigan
|
|
*/
|
|
(function () {
|
|
/**
|
|
* A function that lets you "update from js" without overriding all the view model properties and methods. You just need to supply
|
|
* the viewModel, the original JS model on which you based your data (typically what you'd use in the mapping fromJS method), and the new JS
|
|
* object that has the updated information.
|
|
*
|
|
* @param Object viewModel
|
|
* @param Object dataModel
|
|
* @param Object jsObject
|
|
*
|
|
* @return Object (returns the viewModel)
|
|
*/
|
|
ko.mapping.updateData = function (viewModel, dataModel, jsObject) {
|
|
if (arguments.length < 3) throw new Error("When calling ko.updateData, pass: the view model, the data model, and the updated data.");
|
|
if (!viewModel) throw new Error("The view model is undefined.");
|
|
|
|
for (var i in dataModel) {
|
|
if (i in jsObject && i in viewModel && typeof dataModel[i] != 'function') {
|
|
viewModel[i](jsObject[i]);
|
|
}
|
|
}
|
|
|
|
return viewModel;
|
|
}
|
|
|
|
ko.exportSymbol('ko.mapping.updateData', ko.mapping.updateData);
|
|
})(); |