刚刚开始使用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
来自一个公共图书馆。有没有其他人似乎这样做的原因?
答案 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/