2013-02-18 61 views
0

假設我正在使用模塊模式,例如RequireJS,並且我將模塊A發送到模塊B中。如何從模板調用「依賴注入」JavaScript函數?

現在在我的模塊中,我想使用模板引擎生成HTML,但爲了解決問題,可以說我手動創建HTML字符串。在那個HTML字符串中,我想創建一個按鈕來調用模塊「a」提供的函數。

但我顯然不能只是做:

define([ "a.js" ], function(a) { 

    var html = "<button onclick='a.myfunction();'>Click me!</button>"; 

}); 

我該怎麼辦呢?從JavaScript跨越到「HTML-String」,當我無法調用全局函數時,因爲它的所有模塊爲基礎?

define([ "a.js" ], function(a) { 

    var html = "<button onclick='*** HERE I WANT TO CALL A FUNCTION PROVIDED WITH A***'>Click me!</button>"; 

}); 

回答

1

您可以通過jQuery方式使用事件委派:

define(["a"], function (a) { 

    var html = "<button>Click me!</button>"; 

    $("#buttonContainer").on("click", "button", a.myfunction); 

}); 

哪裏buttonContainer是模板的容器已存在的頁面上。

+0

我知道我可以通過JavaScript手動添加事件 - 但不打破使用模板語言+引擎的整個想法? – corgrath 2013-02-18 21:43:52

+0

@corgrath這個建議比內聯事件處理程序更好。 – bfavaretto 2013-02-18 21:46:52

+0

@corgrath我在這裏沒有看到任何問題。在任何情況下,你的模塊負責生成一個HTML,那麼爲什麼不事後處理事件處理程序呢?如果你仍然想使用按鈕的onclick事件,我相信你可以在你的模板中做這樣的事情:''但我不會這樣做 - 它醜陋無效...... – nexuzzz 2013-02-19 04:55:31