阅读 Marionette.Commands
后,我很好奇找到普通函数和 Marionette.Commands
之间的区别。
如果您定义了任何函数,则可以在任意位置调用该函数。
正常功能:
var normalFun=function(){alert("Normal Function")};
同样的方式Marionette.commands
也按以下方式工作。
//creating instance for Application class
var myApp=new Marionette.Application();
//registering command
myApp.Commands.setHandler("functionName",function(){alert("This is just a normal function but way of defining as different in my point of view.")});
//whereever you want to call this command just run that command with corresponding name
myApp.Commands.execute("functionName");
我的想法是,普通函数和 Marionette.Commands 是相同的。如果这是正确的,那么为什么 Marionette
开发人员要开发这个 Marionette.Commands
概念?
最佳答案
要使用函数,您需要从同一范围调用它,或者拥有对包含对象的引用。命令的情况并非如此,因此它们允许解耦。
假设您想在用户单击应用中的某个按钮时更改菜单的颜色。您可以在(例如)应用程序管理 header 的部分中定义 changeColor
函数。然后,您可以通过从应用程序中的某个位置调用(例如)myHeader.changeColor()
来更改菜单颜色。但如上所述,这意味着您需要引用 myHeader
才能调用其 changeColor
方法。
当您开发应用程序时,您意识到实际上菜单本身变得非常复杂,直接更改其自己的颜色(而不是让标题管理颜色)更有意义。现在,您需要进入应用程序并将 myHeader.changeColor()
的每个实例更改为 myMenu.changeColor()
。这是由于应用程序各个部分的耦合造成的。
如果您使用命令,则可以从需要更改菜单颜色的位置执行命令,并且可以在“标题”部分定义处理程序。然后,当您决定更改应用程序设计时,您可以简单地移动处理程序,使其在“菜单”部分中定义。使用此解决方案,您无需更改实际调用即可更改菜单颜色,因为它们是完全解耦的。
使用这两种解决方案,您都可以更改菜单颜色。但使用命令可以更好地解耦并减少后续工作。当然,这并不意味着您应该在任何地方使用命令:根据您的特定情况调整它们的使用(或不使用)。
关于javascript - 普通函数和Marionette.Commands有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829938/