Search code examples
javascriptknockout.jsrequirejskolite

How to load koLite with requirejs?


This is from knockout.dirtyFlag.js

;(function (ko) {
        ko.DirtyFlag = function (objectToTrack, isInitiallyDirty, hashFunction) {

            hashFunction = hashFunction || ko.toJSON;

            var
                _objectToTrack = objectToTrack,
                _lastCleanState = ko.observable(hashFunction(_objectToTrack)),
                _isInitiallyDirty = ko.observable(isInitiallyDirty),

                result = function () {
                    var self = this;

                    self.isDirty = ko.computed(function () {
                        return _isInitiallyDirty() || hashFunction(_objectToTrack) !== _lastCleanState();
                    });

                    self.reset = function () {
                        _lastCleanState(hashFunction(_objectToTrack));
                        _isInitiallyDirty(false);
                    };

                    return self;
                };

            return result;
        };
    })(ko);

In my model I have a define setup like this:

define([
    "lib/knockout",
    "lib/knockout.dirtyFlag"
],
function(ko) {
...
  self.dirtyFlag = new ko.DirtyFlag([
}

basically I get an error saying that DirtyFlag is undefined.

What do I need to do?


Solution

  • Well, looks like I got it working, so I'll post my findings:

    In my requirejs config I added this:

    shim: {
    "lib/knockout/knockout.dirtyFlag": {
        deps: [
            "lib/knockout/knockout"
        ],
        init: function (ko) {
            var self = this;
            ko.DirtyFlag = self.ko.DirtyFlag;
            return ko;
        }
    }
    

    I'm not very familiar with javascript or requirejs, but init seems to put the dep in "ko" and then I am able to create a DirtyFlag on ko. self.ko.DirtyFlag is the actual knockout.dirtyFlag javascript.