Javascript 如何组织通用代码

Javascript 如何组织通用代码,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,刚刚开始使用backbone.js,我注意到我的许多模型、集合和视图共享一些非常相似的方法。我想重构它们&从提取的位置(/lib?)调用它们。我去搜索文档和/或示例,惊讶地发现我发现的很少(特别是没有)。因此,有几个问题: 有没有一个我忽略的原因,就是为什么在公共库中很少有主干方法的例子 主干项目中是否有共享代码的标准/约定位置 有没有主干类和/或公共插件来帮助存储公共方法 任何想法都将受到赞赏-提前感谢 (编辑)添加示例: 从视图中获取此代码。(无可否认,它太短了,实际上不值得重构,但它的

刚刚开始使用backbone.js,我注意到我的许多模型、集合和视图共享一些非常相似的方法。我想重构它们&从提取的位置(/lib?)调用它们。我去搜索文档和/或示例,惊讶地发现我发现的很少(特别是没有)。因此,有几个问题:

  • 有没有一个我忽略的原因,就是为什么在公共库中很少有主干方法的例子
  • 主干项目中是否有共享代码的标准/约定位置
  • 有没有主干类和/或公共插件来帮助存储公共方法
任何想法都将受到赞赏-提前感谢

(编辑)添加示例:

从视图中获取此代码。(无可否认,它太短了,实际上不值得重构,但它的简单性使它成为一个简洁的示例)

假设我想将其重构为:

  destroy: () ->
    restful_destroy_method(this)
这就叫做:

 restful_destroy_method: (view) ->
    view.model.destroy()
    view.remove()
    return false

来自公共图书馆。其他人似乎没有这样做的原因是什么?

这取决于具体情况,以及您的通用代码是什么

在您的示例中,我可能会创建一个更具体的视图进行扩展

很抱歉,我的JavaScript不够流利,无法在回答中使用它

然后,我将创建
newdestroyableview()
s,而不是创建
newbackbone.View()
s
DestroyableView
可以具有其他常用功能,或者您可以创建多个不同的父定义,并使用它们将它们全部应用于单个对象。

您可以使用拥有通用方法的“基本视图”:

// 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();
    }
});