0

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

4 回答 4

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。

于 2013-03-07T17:17:02.217 回答
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([
}

正如我认为您在 require 和 knockout.dirtyFlag 中定义 ko 一样。

于 2013-03-07T16:46:44.727 回答
0

我已经用定义方法包装了 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;
});
于 2013-03-16T04:27:13.013 回答
0

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

于 2013-12-28T11:09:03.557 回答