如何使用requirejs加载koLite?

时间:2013-03-07 16:42:19

标签: javascript knockout.js requirejs kolite

这是来自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);

在我的模型中,我有一个这样的定义设置:

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

基本上我得到一个错误,说DirtyFlag未定义。

我需要做什么?

4 个答案:

答案 0 :(得分:2)

好吧,看起来我的工作正常,所以我会发布我的发现:

在我的requirejs配置中,我添加了这个:

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

我对javascript或requirejs不是很熟悉,但init似乎把dep放在“ko”中,然后我就能在ko上创建一个DirtyFlag。 self.ko.DirtyFlag是实际的knockout.dirtyFlag javascript。

答案 1 :(得分:0)

你需要lib / knockout和lib / knockout.dirtyFlag。你需要两个吗?

如果您需要两者,请尝试:

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

您也可以尝试:

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

我认为你在要求和knockout.dirtyFlag中定义了ko。

答案 2 :(得分:0)

我结束了使用define方法包装kolite类。下面带有命令的示例,但对其他人来说也是一样的。

requirejs.config({
paths: {
    knockout: 'Scripts/libs/knockout/knockout-2.2.1.debug',
    command: 'Scripts/libs/knockout/knockout.command'
},

shim: {
    knockout: {
        exports: 'ko'
    },
    command: {
        deps: ['knockout'],
        exports: 'ko'
    }
});

包裹命令

define(['knockout'], function(ko) {
  ... // command original code
  return ko;
)

在我的模块中

define(['command'], function (ko) {
    var doYourStaff = 0;
    return doYourStaff;
});

答案 3 :(得分:0)

我们现在已经为所有三个库添加了对RequireJS的支持,您可以使用master中的最新版本。