Магистраль / RequireJS и несколько моделей - PullRequest
5 голосов
/ 02 февраля 2012

У меня проблемы с тем, чтобы сосредоточиться вокруг прежде всего RequireJS. Я вижу, что это хорошая / необходимая технология, но ее внедрение для меня было настоящим натяжкой. Я очень ценю вашу помощь!

Я пытаюсь разработать довольно гибкое приложение с Backbone и RequireJS. Проблема в том, что я полностью привык к синтаксису типа new Person() без указания зависимостей. Есть ли эффективный способ использования RequireJS с большим количеством моделей? Я думаю, что моя проблема всегда работает с возвратами. Я рассмотрел использование фабричного метода для создания модели с функцией require, но для этого необходимо, чтобы функция require была синхронной, что полностью противоречит цели RequireJS.

Просто кажется неправильным, что сначала нужно требовать все мои модели, а затем включать их в функцию создания экземпляров - или нет?

Есть ли у вас какие-либо предложения или учебные пособия о том, как структурировать и смоделировать такое приложение?

Спасибо, что помогли мне!

JMax

1 Ответ

21 голосов
/ 02 февраля 2012

Вы можете использовать то, что я называю шаблоном модуля js. Если вы знаете, что группы классов часто используются вместе, вы можете сделать что-то вроде этого.

Сначала вы определяете каждый класс в отдельном файле, а затем определяете модуль для их объединения

Module.js

define([

    './models/FirstModel',
    './models/SecondModel',
    './views/FirstView',
    './views/SecondView',
    'txt!./templates/template.tpl'

], function(FirstModel, SecondModel, FirstView, SecondView, template) {

    return {
        FirstModel: FirstModel,
        SecondModel: SecondModel,
        FirstView: FirstView,
        SecondView: SecondView,
        template: template
    }

});

А потом, когда вы хотите использовать класс из этого модуля, вы просто делаете

define(['./Module'], function(Module) {

    var AView = Module.FirstView.extend({

        model: Module.FirstModel,

        render: function() {

            this.html(_.template(Module.template)(this.model.attributes));

            if (something) {

                this.$el.append(new Module.SecondView().render().el);
            }
        }
    })

    return AView;
});

Я не верю, что используя модули, определенные с requirejs, мы должны возвращать экземпляр - мы всегда должны возвращать конструктор или объект.

Вы должны полностью принять определяющее и требующее - со временем вы начнете любить его - не нужно много думать о добавлении / отслеживании зависимостей и т. Д. Везде вручную или (так что 2005!), Имея большую часть материала в одном файл:)

...