2013-03-07 38 views
0

这是knockout.dirtyFlag.js如何使用requirejs加载koLite?

;(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是不确定的。

我需要做什么?

回答

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 ,但初始化似乎把dep放在“ko”中,然后我可以在ko上创建一个DirtyFlag。 self.ko.DirtyFlag是真正的knockout.dirtyFlag javascript。

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([ 
} 

当我想你的需要,以及定义KO在knockout.dirtyFlag。

+0

说kodf是undefined当我尝试这个 – 2013-03-07 16:50:57

+0

页面加载knockout.dirtyFlag.js? – SteveP 2013-03-07 16:53:00

+0

不,我试图通过require.js – 2013-03-07 16:54:46

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(['command'], function (ko) { 
    var doYourStaff = 0; 
    return doYourStaff; 
}); 
+0

来加载它knockout.command.js有几个函数就像这样;(function(ko).....你是如何为它们中的每一个做一个定义的?请粘贴你的knockout.command.js文件 – 2013-03-26 16:34:34

0

现在我们已经添加了RequireJS所有三个库支持包命令

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

,您可以使用最新版本的master

+0

如果你是这个软件的附属软件,你可以在你的回答中明确说明,否则会有被删除为垃圾邮件的危险 – ChrisF 2013-12-28 12:08:43

+0

哦,不知道。我是其中一位共同作者。 – hfjallemark 2014-01-17 16:30:14