【问题标题】:How to load koLite with requirejs?如何使用 requirejs 加载 koLite?
【发布时间】:2013-02-22 23:34:33
【问题描述】:

这是来自 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 未定义。

我需要做什么?

【问题讨论】:

    标签: javascript knockout.js requirejs kolite


    【解决方案1】:

    好吧,看来我已经成功了,所以我将发布我的发现:

    在我的 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。

    【讨论】:

      【解决方案2】:

      您需要 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。

      【讨论】:

      • 说当我尝试这个时 kodf 是未定义的
      • 页面是否加载了 knockout.dirtyFlag.js ?
      【解决方案3】:

      我已经用定义方法包装了 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;
      });
      

      【讨论】:

      • knockout.command.js 有几个这样的函数 ;(function(ko)..... 你是如何为每个函数定义的?请粘贴你的 knockout.command.js文件。
      【解决方案4】:

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

      【讨论】:

      • 如果您与此软件有关联,请在您的回答中说明清楚。否则有被作为垃圾邮件删除的危险。
      • 哦,不知道。所以是的,我是合著者之一。
      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 2013-03-25
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多