Skip to content

Commit a140631

Browse files
committed
Add unidirectional data binding via link(). Closes #15
1 parent 869f794 commit a140631

File tree

2 files changed

+50
-26
lines changed

2 files changed

+50
-26
lines changed

index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,14 @@ ReactiveFunction.serializeGraph = function (){
181181
return serialized;
182182
}
183183

184+
function identity(x){ return x; }
185+
186+
ReactiveFunction.link = function (propertyA, propertyB){
187+
return ReactiveFunction({
188+
inputs: [propertyA],
189+
output: propertyB,
190+
callback: identity
191+
});
192+
}
193+
184194
module.exports = ReactiveFunction;

test.js

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,10 @@ describe("ReactiveFunction", function() {
435435
});
436436

437437
describe("Data Binding", function (){
438-
it("Should be able to implement unidirectional data binding.", function (){
439438

439+
it("Should be able to implement unidirectional data binding.", function (){
440440
var a = ReactiveProperty(5);
441441
var b = ReactiveProperty(10);
442-
443442
var reactiveFunction = ReactiveFunction({
444443
inputs: [a],
445444
output: b,
@@ -449,7 +448,6 @@ describe("ReactiveFunction", function() {
449448
});
450449

451450
ReactiveFunction.digest();
452-
453451
assert.equal(b(), 5);
454452

455453
// For serialization.
@@ -466,7 +464,6 @@ describe("ReactiveFunction", function() {
466464
var b = ReactiveProperty(10);
467465

468466
function identity(x){ return x; }
469-
470467
var rf1 = ReactiveFunction({ inputs: [a], output: b, callback: identity });
471468
var rf2 = ReactiveFunction({ inputs: [b], output: a, callback: identity });
472469

@@ -555,6 +552,17 @@ describe("ReactiveFunction", function() {
555552
});
556553
});
557554

555+
it("Should support unidirectional data binding via link().", function (){
556+
var a = ReactiveProperty(5);
557+
var b = ReactiveProperty(10);
558+
559+
var reactiveFunction = ReactiveFunction.link(a, b);
560+
561+
ReactiveFunction.digest();
562+
assert.equal(b(), 5);
563+
564+
reactiveFunction.destroy();
565+
});
558566
});
559567

560568
describe("Serialization", function() {
@@ -584,19 +592,21 @@ describe("ReactiveFunction", function() {
584592
assert.equal(serialized.nodes.length, 3);
585593
assert.equal(serialized.links.length, 2);
586594

587-
assert.equal(serialized.nodes[0].id, "56");
588-
assert.equal(serialized.nodes[1].id, "57");
589-
assert.equal(serialized.nodes[2].id, "58");
595+
var idStart = 58;
596+
597+
assert.equal(serialized.nodes[0].id, String(idStart));
598+
assert.equal(serialized.nodes[1].id, String(idStart + 1));
599+
assert.equal(serialized.nodes[2].id, String(idStart + 2));
590600

591601
assert.equal(serialized.nodes[0].propertyName, "fullName");
592602
assert.equal(serialized.nodes[1].propertyName, "firstName");
593603
assert.equal(serialized.nodes[2].propertyName, "lastName");
594604

595-
assert.equal(serialized.links[0].source, "57");
596-
assert.equal(serialized.links[0].target, "56");
597-
assert.equal(serialized.links[1].source, "58");
598-
assert.equal(serialized.links[1].target, "56");
599-
605+
assert.equal(serialized.links[0].source, String(idStart + 1));
606+
assert.equal(serialized.links[0].target, String(idStart));
607+
assert.equal(serialized.links[1].source, String(idStart + 2));
608+
assert.equal(serialized.links[1].target, String(idStart));
609+
600610
rf.destroy();
601611
});
602612

@@ -622,16 +632,18 @@ describe("ReactiveFunction", function() {
622632
// Fix by copying values from:
623633
//console.log(JSON.stringify(serialized, null, 2));
624634

625-
assert.equal(serialized.nodes[0].id, "59");
626-
assert.equal(serialized.nodes[1].id, "60");
627-
assert.equal(serialized.nodes[2].id, "61");
635+
var idStart = 61;
636+
637+
assert.equal(serialized.nodes[0].id, String(idStart));
638+
assert.equal(serialized.nodes[1].id, String(idStart + 1));
639+
assert.equal(serialized.nodes[2].id, String(idStart + 2));
628640

629641
assert.equal(typeof serialized.nodes[0].propertyName, "undefined");
630642

631-
assert.equal(serialized.links[0].source, "60");
632-
assert.equal(serialized.links[0].target, "59");
633-
assert.equal(serialized.links[1].source, "61");
634-
assert.equal(serialized.links[1].target, "59");
643+
assert.equal(serialized.links[0].source, String(idStart + 1));
644+
assert.equal(serialized.links[0].target, String(idStart));
645+
assert.equal(serialized.links[1].source, String(idStart + 2));
646+
assert.equal(serialized.links[1].target, String(idStart));
635647

636648
rf.destroy();
637649
});
@@ -658,18 +670,20 @@ describe("ReactiveFunction", function() {
658670

659671
//console.log(JSON.stringify(serialized, null, 2));
660672

661-
assert.equal(serialized.nodes[0].id, "62");
662-
assert.equal(serialized.nodes[1].id, "63");
663-
assert.equal(serialized.nodes[2].id, "64");
673+
var idStart = 64;
674+
675+
assert.equal(serialized.nodes[0].id, String(idStart));
676+
assert.equal(serialized.nodes[1].id, String(idStart + 1));
677+
assert.equal(serialized.nodes[2].id, String(idStart + 2));
664678

665679
assert.equal(serialized.nodes[0].propertyName, "");
666680
assert.equal(serialized.nodes[1].propertyName, "a");
667681
assert.equal(serialized.nodes[2].propertyName, "b");
668682

669-
assert.equal(serialized.links[0].source, "63");
670-
assert.equal(serialized.links[0].target, "62");
671-
assert.equal(serialized.links[1].source, "64");
672-
assert.equal(serialized.links[1].target, "62");
683+
assert.equal(serialized.links[0].source, String(idStart + 1));
684+
assert.equal(serialized.links[0].target, String(idStart));
685+
assert.equal(serialized.links[1].source, String(idStart + 2));
686+
assert.equal(serialized.links[1].target, String(idStart));
673687

674688
rf.destroy();
675689
});

0 commit comments

Comments
 (0)