我使用的是backbone-boilerplate,您可以找到here。
我想知道如何添加全局功能,而不是显式地绑定到任何特定的集合、模型、视图等。例如“logout”函数,它可能看起来像这样:
var logout = function(){
// Clear Favorites
// Handle asynchronous logging (all in-app logs are sent to the server at logout)
// Redirect to the login page
// Do other cleanup
}基本上,这将处理许多模型/集合,包括Favorites、Events、Logs、Users和应用程序Router
如果您查看backbone-boilerplate中的main.js文件,我将这些函数添加到顶部(第13行),如下所示:
function(namespace, $, Backbone, Example){
// BEGIN MY APP LOGIC
namespace.app.logout = function(){
// Do logout here
};
// END MY APP LOGIC
var Router = Backbone.Router.extend({这可以很好地工作,但应用程序逻辑可能很快就会变得失控。我的问题是,组织这些代码的更好方法是什么?如果我有一个Utils模块并加载了Utils模块,它会更有意义吗?
干杯!
发布于 2012-04-10 12:31:51
TLDR:http://addyosmani.github.com/backbone-fundamentals/高级部分。
让它成为可能,然后让它变得美丽,然后让它变得更快。
当你开发你的应用程序并让它工作(可能)时,哪些功能属于一起就会变得很明显。将它们分成相应的模块(很漂亮)。
我使用的是require.js,而不是backbone-boilerplate (bb也有一个AMD分支)。我组织我的应用程序的方式就像你所描述的,我有一个utils模块,它有通用的应用程序内容。然后,我将Auth、Notification和Date格式化内容添加到utils模块。然后在我懒惰的地方包含utils模块,并希望我所有的util函数都可用。
因为它们都只是模块/混合模块,所以我还可以将auth/notification/date模块包含在我需要它们的任何单个模块中。
发布于 2012-04-05 02:16:34
我在我的backbone.js应用程序中也遇到了同样的问题。我最终所做的与您建议的类似,创建了一个具有特定全局函数的View (类似于Utils模块)。
如果您希望避免将对这个"Utils“类的引用耦合到它,您可以绑定到事件队列,并基于消息进行处理。例如,对于注销函数,您可以将“注销”消息发布到事件队列,并从"Utils“视图中绑定到该消息。这样,无论它在哪里被调用,消息都会被传递到适当的函数。要调用注销函数,您只需将“注销”消息发送到事件队列。
如果您的类变得非常大,这可能会让人感到困惑,但我建议只放置全局需要的函数。
backbone更新:作为一种更健壮的解决方案,您可以将您的实用函数直接构建到本身中。文档说明:
“因为它(backbone)是应用程序的基础,所以您应该以自己认为合适的方式对其进行扩展和增强--整个源代码都经过了注释,使您更容易做到这一点。”
我发现,通过添加到backbone对象,您可以增强内置实用程序功能(noConflict和setDomLibrary),以包括注销等内容。就像任何Javascript函数一样,您可以初始化必要的变量,然后像这样调用它们
Backbone.logout();发布于 2012-04-07 05:04:46
我会把它们放到应用程序视图中。当它变得太大时(我个人的限制是600-800行),你通常能够将这些全局方法中的大多数组合到几个逻辑上合理的助手模块中,以保持你的应用程序视图足够小。
https://stackoverflow.com/questions/10016326
复制相似问题