Javascript 如何组织通用代码
刚刚开始使用backbone.js,我注意到我的许多模型、集合和视图共享一些非常相似的方法。我想重构它们&从提取的位置(/lib?)调用它们。我去搜索文档和/或示例,惊讶地发现我发现的很少(特别是没有)。因此,有几个问题:Javascript 如何组织通用代码,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,刚刚开始使用backbone.js,我注意到我的许多模型、集合和视图共享一些非常相似的方法。我想重构它们&从提取的位置(/lib?)调用它们。我去搜索文档和/或示例,惊讶地发现我发现的很少(特别是没有)。因此,有几个问题: 有没有一个我忽略的原因,就是为什么在公共库中很少有主干方法的例子 主干项目中是否有共享代码的标准/约定位置 有没有主干类和/或公共插件来帮助存储公共方法 任何想法都将受到赞赏-提前感谢 (编辑)添加示例: 从视图中获取此代码。(无可否认,它太短了,实际上不值得重构,但它的
- 有没有一个我忽略的原因,就是为什么在公共库中很少有主干方法的例子
- 主干项目中是否有共享代码的标准/约定位置
- 有没有主干类和/或公共插件来帮助存储公共方法
destroy: () ->
restful_destroy_method(this)
这就叫做:
restful_destroy_method: (view) ->
view.model.destroy()
view.remove()
return false
来自公共图书馆。其他人似乎没有这样做的原因是什么?这取决于具体情况,以及您的通用代码是什么 在您的示例中,我可能会创建一个更具体的视图进行扩展 很抱歉,我的JavaScript不够流利,无法在回答中使用它 然后,我将创建
newdestroyableview()
s,而不是创建newbackbone.View()
sDestroyableView
可以具有其他常用功能,或者您可以创建多个不同的父定义,并使用它们将它们全部应用于单个对象。您可以使用拥有通用方法的“基本视图”:
// Create a Basic View which have all generic methods
var BasicView = Backbone.View.extend({
restful_destroy_method: function () {
this.model.destroy();
this.remove();
return false
}
});
// Create a view which herits the methods of BasicView
var ExampleView = BasicView.extend({
destroy: function () {
this.restful_destroy_method();
}
});
您可以在JSFIDLE上显示一个示例:添加一个特定示例,说明您正在处理哪种常见代码,可能会有所帮助。可能有几种不同的方法来解决这个问题,这取决于你在做什么。上面添加的示例表示感谢您的回答。我唯一关心的是,在很多情况下,我很想混合匹配我使用的方法。一个视图可能需要常见的销毁、发送至面板、发送电子邮件方法,而另一个视图可能需要发送至面板、播放视频等。我想我可以创建一个常见的“扩展”视图,其中包含我希望在项目中的任何模型中使用的所有方法,但我不确定,如果我在任何给定的视图中只使用了一手扩展视图的方法,这会对内存产生什么影响。@unlaimedbaggage-当然,您仍然可以使用它。你可以从许多不同的来源,每个来源都定义了自己的函数。啊,我一直忘了JavaScript比我想象的更强大。非常感谢。
DestroyableView = Backbone.View.extend({
destroy: function () {
this.model.destroy();
this.remove();
return false;
}
});
// Create a Basic View which have all generic methods
var BasicView = Backbone.View.extend({
restful_destroy_method: function () {
this.model.destroy();
this.remove();
return false
}
});
// Create a view which herits the methods of BasicView
var ExampleView = BasicView.extend({
destroy: function () {
this.restful_destroy_method();
}
});