如何组织通用代码

时间:2011-12-30 15:43:03

标签: javascript backbone.js coffeescript

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

  • 我是否有理由忽视为什么在公共图书馆中考虑很少的主干方法示例?
  • 共享代码的骨干项目中是否有标准/商定的位置?
  • 有助于存储常用方法的任何骨干类和/或常用插件吗?

任何想法都赞赏 - 提前感谢。

(编辑)添加的示例:

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

  destroy: () ->
    @model.destroy()
    @remove()
    return false

假设我想将其重构为:

  destroy: () ->
    restful_destroy_method(this)

然后调用:

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

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

2 个答案:

答案 0 :(得分:5)

这取决于具体情况,以及您的常用代码。

就你的例子而言,我可能会做的是创建一个更具体的视图来扩展。

直接JavaScript的道歉,我不会在CoffeeScript中流利使用它来回答。

DestroyableView = Backbone.View.extend({
    destroy: function () {
        this.model.destroy();
        this.remove();
        return false;
    }
});

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

答案 1 :(得分:1)

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

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

您可以在此处显示有关jsFiddle的示例:http://jsfiddle.net/Atinux/YDMNg/