2011-12-30 5 views
2

Просто начав с 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

Это может помочь добавить конкретный пример того, какой вид общий код, с которым вы имеете дело. Вероятно, есть несколько способов решить это, в зависимости от того, что вы делаете. –

+0

* кивает * Не беспокойтесь. Пример добавлен выше – PlankTon

ответ

5

Это зависит от ситуации и общего кода.

В случае вашего примера, то, что я мог бы сделать, было бы создать более конкретный вид для расширения.

Извинения за прямой JavaScript, я не так свободно говорю с CoffeeScript, чтобы использовать его в ответе.

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

Затем, вместо того чтобы создавать new Backbone.View() с, я бы создать new DestroyableView() с. DestroyableView может иметь другие общие функции, или вы можете создать несколько разных определений родительских элементов и использовать _.extend(), чтобы применить их все к одному объекту.

+0

* кивает * Спасибо за ответ. Мое единственное беспокойство заключалось в том, что во многих случаях мне было бы очень интересно смешивать-n-match, какие методы я втягиваю. Один вид может потребовать общие методы destroy, send_to_panel, send_email, тогда как другим может потребоваться send_to_panel, play_video и т. Д.Я предполагаю, что я мог бы создать общий расширенный просмотр, содержащий все методы, которые я могу использовать в любой из моделей моего проекта, но я не уверен, какое влияние это будет на память, если бы я использовал только ручную методов расширенного представления в любом представлении. – PlankTon

+0

@unclaimedbaggage - Конечно, и вы все еще можете это сделать, используя это. Вы можете [расширить] (http://documentcloud.github.com/underscore/#extend) из разных источников, каждый из которых определяет свои собственные функции. –

+0

Ahh - Я продолжаю забывать, что JavaScript больше, чем я думаю. Большое спасибо. – PlankTon

1

Вы можете использовать «Basic View», которые владеют общие методы:

// 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/

Смежные вопросы