Как организовать общий код - PullRequest
2 голосов
/ 30 декабря 2011

Я только начал работать с 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 ]

5 голосов
/ 30 декабря 2011

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

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

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

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

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

1 голос
/ 30 декабря 2011

Вы можете использовать «Базовое представление», которому принадлежат универсальные методы:

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

...