2013-02-18 20 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