2014-04-04 58 views
0

我正在使用Knockout和Require。我想在一個單獨的模塊中使用一些Knockout處理程序。沒有JavaScript代碼依賴於此模塊,但它用於HTML中的數據綁定屬性。使用RequireJS自動加載依賴模塊

我該如何判斷要求每當添加淘汰賽腳本時,它也應該添加此模塊,並且它依賴於淘汰賽(它應該能夠使用'ko')?

回答

1

如果我明白你的意思,這只是「定義一個具有依賴性的模塊」,這是一個非常基本的requirejs事情。看看requirejs api文檔的"Definition Function with Dependencies"部分。

下面是從文檔的例子:

//my/shirt.js now has some dependencies, a cart and inventory 
//module in the same directory as shirt.js 
define(["./cart", "./inventory"], function(cart, inventory) { 
     //return an object to define the "my/shirt" module. 
     return { 
      color: "blue", 
      size: "large", 
      addToCart: function() { 
       inventory.decrement(this); 
       cart.add(this); 
      } 
     } 
    } 
); 

所以,你可以在你的淘汰賽處理程序,在那裏你會通過你的淘汰賽依賴於功能也這麼做。然後,在每個你需要敲除的模塊中,將你的挖空處理程序添加到定義語句中的依賴項。如果你不需要它們在你的模塊內,但只在DOM內部,那麼你不必將它們傳遞給函數參數。你可以只添加淘汰賽處理程序的定義依賴列表的末尾無需增加額外的參數是這樣的:

define(["knockout", "knockout-handlers"], function(knockout) { 
     //you're module using knockout, 
     //knockout-handlers will be available inside the dom 
}); 

當我重新考慮我的回答,我得出的結論是,循環依賴是不是這裏有問題。你可以使用一個墊片配置爲您的「自動依賴」:

//within your config 
requirejs.config({ 
    shim: { 
     'knockout': { 
      deps: ['knockout-handlers'] 
     } 
    } 
}); 

//your knockout handlers module definition 
define(["knockout"], function(knockout) { 
     return { 
      //Your knockout-handler module 
     } 
}); 

這應該載入您的淘汰賽處理程序每​​次加載淘汰賽。

+0

我試過了,它基本上工作。但是我不使用這個代碼中的'庫存'模塊。所以添加依賴關係並不合適。而如果我添加更多的模塊...在這一點上,我堅持這一點,直到我找到更好的方式...謝謝... – Sorskoot

+0

我認爲問題是你的循環依賴。如果淘汰賽處理程序不依賴淘汰賽,則可以「誤用」墊片配置以添加「靜態」依賴項來淘汰賽。但是這樣做並不奏效,因爲淘汰賽取決於淘汰賽 - 這取決於淘汰賽 - 壞事。 –

+0

好吧,我還有一個想法:你可以(錯)使用墊片配置來做到這一點。我會在幾分鐘內將其添加到我的答案中。 –