Propagable - Entity subclass that provides clone/propagation

by JayData

HTML

<script src="http://include.jaydata.org/jaydata.js"></script>

JavaScript

//Create the Propagable class to extend $data.Entity with your base logic

        var Propagable = $data.Entity.extend("Propagable", {
            constructor: function (initData) {
                this.getSource = function () {
                    return initData;
                }
            },

            propagate: function () {
                var source = this.getSource();
                var self = this;
                this.changedProperties.forEach(function (prop) {
                    source[prop.name] = self[prop.name];
                });
            }
        });

        var Order = Propagable.extend("Order", {
            Id: { key: true, type: 'int', computed: true},
            Product: {
                type: 'string'
            }
        });

        var MyContext = $data.EntityContext.extend("CTX", {
            Orders: {
                type: $data.EntitySet,
                elementType: Order
            }
        });

        var context = new MyContext({
            provider: 'local'
        });
        context.onReady(function () {
            var o = new Order({
                Product: 'abc'
            });
            var o2 = new Order(o);
            context.Orders.add(o);
            o2.Product = "def";
            o2.propagate();
            context.saveChanges(function () {
                alert("item saved:" + o.Product);
            });
        });