-
Notifications
You must be signed in to change notification settings - Fork 4
/
Bind.js
58 lines (56 loc) · 2.06 KB
/
Bind.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
define([
"dojo/_base/lang",
"dojo/_base/array"
], function(lang, array){
var mvc = lang.getObject("dojox.mvc", true);
return lang.mixin(mvc, {
bind: function(/*dojo/Stateful*/ source, /*String*/ sourceProp,
/*dojo/Stateful*/ target, /*String*/ targetProp,
/*Function?*/ func, /*Boolean?*/ bindOnlyIfUnequal){
// summary:
// Bind the specified property of the target to the specified
// property of the source with the supplied transformation.
// source:
// The source dojo/Stateful object for the bind.
// sourceProp:
// The name of the source's property whose change triggers the bind.
// target:
// The target dojo/Stateful object for the bind whose
// property will be updated with the result of the function.
// targetProp:
// The name of the target's property to be updated with the
// result of the function.
// func:
// The optional calculation to be performed to obtain the target
// property value.
// bindOnlyIfUnequal:
// Whether the bind notification should happen only if the old and
// new values are unequal (optional, defaults to false).
var convertedValue;
return source.watch(sourceProp, function(prop, oldValue, newValue){
convertedValue = lang.isFunction(func) ? func(newValue) : newValue;
if(!bindOnlyIfUnequal || convertedValue != target.get(targetProp)){
target.set(targetProp, convertedValue);
}
});
},
bindInputs: function(/*dojo/Stateful[]*/ sourceBindArray, /*Function*/ func){
// summary:
// Bind the values at the sources specified in the first argument
// array such that a composing function in the second argument is
// called when any of the values changes.
// sourceBindArray:
// The array of dojo/Stateful objects to watch values changes on.
// func:
// The composing function that is called when any of the source
// values changes.
// tags:
// protected
var watchHandles = [];
array.forEach(sourceBindArray, function(h){
watchHandles.push(h.watch("value", func));
});
return watchHandles;
}
});
});