javascript - 普通函数和Marionette.Commands有什么区别

标签 javascript function marionette

阅读 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/

相关文章:

javascript - 使用 jquery 或 javascript 在选择框中隐藏重复的选项文本值

Javascript 仅提取捕获组

python - 在Python中编写一个保存和返回值的函数

javascript - 在 Marionette.js 中停止渲染

javascript - 单击函数执行当前和先前的函数代码

javascript - 如何将变量设置为外部内容?

javascript - 将 xsl 变量传递给 javascript 函数

function - gitlab ci 脚本功能失败时屏蔽 exit 1

javascript - Backbone 错误无法调用 Deferred 方法

javascript - 如何在 Marionette.js CollectionView 中获取所选 <option> 的模型?