2

У меня есть приложение backbone.js с несколькими моделями, представлениями, коллекциями и шаблонами (в теге скрипта с типом text/template с идентификатором, который использует представления для загрузки шаблона при использовании _. шаблон ($ (идентификатор) .html())).Структурирование приложения backbone.js

В настоящее время все вышесказанное находится в одном файле, что делает его довольно уродливым. Это автономное приложение (то есть оно загружается из локальной файловой системы и разговаривает с веб-сервером, который разрешает запросы с кросс-началом). Я пытался выяснить, как перемещать представления, модели и шаблоны в отдельные файлы, я пытался просто перемещать представления и модели в views.js и models.js, но представления зависят от шаблонов и шаблонов не может быть помещен в views.js (как его JS-файл и, следовательно, не может иметь теги скриптов ..).

Мое единственное решение на данный момент, похоже, движется шаблоны в глобальные переменные, которые были бы в порядке для яваскрипта строки отводящей/мульти строки строки, которые потребовались бы, кроме ..

Как это обычно обрабатываемые?

Спасибо!

ответ

4

Используйте RequireJS, чтобы упаковать ваши взгляды и модели в модули, а RequireJS позаботится о разрешении зависимости для вас. Вы можете также перейти к одному виду или модели для каждого файла, вместо того, чтобы помещать их все в один view.js или models.js.

Затем используйте плагин text!, чтобы сохранить ваши шаблоны в текстовых файлах и потребовать их, как обычные модули.

define(function (require, exports, module) { 
    var templateText = require("text!./person.tmpl"); 
    var $ = require("jquery"); 

    exports.PersonView = Backbone.View.extend({ 
    render: function() { 
     doStuffWith(_.template(templateText)); 
    } 
    }); 
}); 
+1

Это имеет смысл, но я предвижу одну проблему. Некоторые из моих шаблонов ссылаются на другие шаблоны, т. Е. У меня есть раздел JS в шаблоне, который вызывает другой шаблон для генерации элемента DOM, например (который затем добавляется к текущий шаблон с использованием print()), любая идея о том, как заставить это работать? –

+2

+1 Даже не осмеливайтесь начинать, не поднимая requirejs или какую-либо другую форму управления модулем! –

+1

Не знаете, как обращаться с тем ... шаблоны должны содержать как можно меньше JavaScript для такого рода причин. – Domenic

2

Ознакомьтесь с этими стартовыми приложениями, использующими магистраль и RequireJS.

У этого есть Backbone.LocalStorage в нем, который может помочь вам с вашим автономным материалом.

https://github.com/jcreamer898/Savefavs

Этот другой один только простой стартер для создания приложения ...

https://github.com/jcreamer898/RequireJS-Backbone-Starter

Они, как вы можете обрабатывать шаблоны с это ...

define([ 
     'jquery', 
     'backbone', 
     'underscore', 
     'models/model', 
     'text!templates/main.html'], 
function($, Backbone, _, model, template){ 
    var MyView = Backbone.View.extend({ 
     initialize: function(){ 
      this.template = _.template(template); 
     }, 
     render: function(){ 
      this.template(model); 
     } 
    }); 
    return new MyView();  

});

2

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

Это очень просто изменить средство визуализации шаблонов на несколько разных JST. Даже если общая идея может быть выполнена без каких-либо требований к серверной стороне, шаблон шаблона также предоставляет базовое приложение node.js.

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