这是我的代码结构,我从其他人那里看到并试图理解它。我相信它的封闭风格而不是插件风格?也许有人可以为我澄清一下,如果它的封闭风格。
插件样式。以下是一些一般性问题。
这是一个更大的问题,所以我会把它自己解决。 当我从内部方法 actionMethod()触发事件时 我希望能够从另一个js文件中接收该事件。例如home.js
home.js
$(function(){
NP.bind("CHANGED", event_handler);
function event_handler(evt, data ){
// do something....
}
$('#button').click(function(){
// call my public method in my NP plugin
NP.PublicMethod();
});
});
关闭(风格)
var NP = function(namespace){
var innerVariable = "the outside scope can't here me";
finction innerMethod(){
//does some inner functionality to the closure
}
namespace.PublicMethod = function(){
// does some calling of inner function.
// user can access this method from the myplugin directly.
// example: NP.PublicMethod();
}
function actionMethod(){
// trigger an event so others outside this closure can react
namespace.trigger("CHANGED");
}
}(NP || {});
如果有人可以回答前3个问题,请回答有关触发事件的更大问题。提前致谢
更新
ShankarSangoli通过从DOM元素触发事件的例子。 这里的问题是我有一个dom元素作为我的近距离内的一个关闭按钮,但home.js不知道它或没有引用,也不应该。所以我需要一种方法来监听NP对象级别从它发出的事件。作为测试我尝试了下面的代码,它的工作原理。不知道为什么它不是DOM元素,但在大多数语言中,您可以从大多数通用对象触发事件。在这种情况下,NP实际上是一个对象,或者我疯狂地认为它是一个对象。
关闭对象
function actionMethod(){
// trigger an event so others outside this closure can react
$(namespace).trigger("CHANGED");
}
home.js
$(TWCCP).bind("CLOSED_POPUP", onClosePopup);
现在我对此非常困惑。这怎么可能呢???
答案 0 :(得分:1)
NP
位于全局命名空间中。NP.methodName();
NP = null
,那么它将被销毁,javascript将负责垃圾收集并销毁它的内部变量。除非NP.bind
是与dom元素关联的jquery对象,否则不能使用NP
。
触发任何事件的方式如下
$("domElementSelector").trigger("click");//Or any otherr event, even custom event like in your case CHANGED can be triggered.
对于你的最后一部分,试试这个
<强>封闭(风格)强>
var NP = function(namespace){
var innerVariable = "the outside scope can't here me";
finction innerMethod(){
//does some inner functionality to the closure
}
namespace.PublicMethod = function(){
// does some calling of inner function.
// user can access this method from the myplugin directly.
// example: NP.PublicMethod();
}
function actionMethod(){
// trigger an event so others outside this closure can react
$(namespace).trigger("CHANGED");
}
namespace.bind = function(eventType, handler)
{
$(namespace).bind(eventType, handler);
}
return namespace;
}(NP || {});
<强> home.js 强>
$(function(){
NP.bind("CHANGED", event_handler);
function event_handler(evt, data ){
// do something....
}
$('#button').click(function(){
// call my public method in my NP plugin
NP.PublicMethod();
});
});