2013-03-07 36 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