forked from aranm/scalable-javascript-architecture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Core.DataBinding.js
94 lines (77 loc) · 3.08 KB
/
Core.DataBinding.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*globals Core, ko, require*/
(function () {
var dataBindingFunction = function (dom, ko) {
var urlMappings = {};
return {
getMapping: function (name) {
return urlMappings[name];
},
addMapping: function (name, domElement) {
if (!urlMappings[name]) {
urlMappings[name] = [];
}
//make sure wo dont add the same binding twice
if (urlMappings[name].indexOf(domElement) === -1) {
urlMappings[name].push(domElement);
}
},
applyBinding: function (moduleId, viewModel) {
var i, arrayLength, mappings = this.getMapping(moduleId), errors = "", domElement, element;
if (mappings === null || mappings === undefined) {
throw new Error("No mapping defined for: " + moduleId);
}
for (i = 0, arrayLength = mappings.length; i < arrayLength; i++) {
domElement = mappings[i];
if (domElement === undefined || domElement === null) {
errors += "Unmapped moduleId passed to bind: " + moduleId + '\n';
}
element = dom.getElementById(domElement);
if (element === undefined || element === null) {
errors += "Undefined dom element passed to bind: " + domElement + '\n';
}
else {
ko.applyBindings(viewModel, element);
}
}
//throw any accumulated errors
if (errors !== "") {
throw new Error(errors);
}
},
removeBinding: function (moduleId) {
var i, arrayLength, mappings = this.getMapping(moduleId), errors = "", domElement, element;
if (mappings === null || mappings === undefined) {
throw new Error("No mapping defined for: " + moduleId);
}
for (i = 0, arrayLength = mappings.length; i < arrayLength; i++) {
domElement = mappings[i];
if (domElement === undefined || domElement === null) {
errors += "Unmapped moduleId passed to bind: " + moduleId + '\n';
}
element = dom.getElementById(domElement);
if (element === undefined || element === null) {
errors += "Undefined dom element passed to bind: " + domElement + '\n';
}
else {
//remove any bindings on the node
ko.cleanNode(element);
}
}
//throw any accumulated errors
if (errors !== "") {
throw new Error(errors);
}
}
};
};
//manage require module loading scenario
if (typeof define === "function" && define.amd) {
define("Core.DataBinding", ["Core", "knockout"], function (core, ko) {
core.DataBinding = (dataBindingFunction)(document, ko);
return core.DataBinding;
});
}
else {
Core.DataBinding = (dataBindingFunction)(document, ko);
}
})();