Я думаю, что я не использую представления Backbone JS правильно? - PullRequest
3 голосов
/ 28 марта 2011

Я только начал использовать Backbone (и Underscore) JS.Мы создаем большое iPad-приложение для HTML5, и оно должно работать на всей клиентской стороне.Проект нуждается в структуре, и Backbone, кажется, подходит.Кажется, он не слишком мешает и может быть использован как набор инструментов (особенно из-за необходимости в Underscore).

У меня есть один вопрос.Это приложение HTML5 в основном одностраничное приложение.Все начинается с файла index.html.Я узнал, как Backbone управляет фрагментами URL, что мне действительно нравится.Настроить маршрутизацию событий для конкретных моделей очень просто.

В этом приложении HTML5, над которым я работаю, много вложенных слоев "страниц".Существует около трех уровней вложенности.Это данные JSON, которые использует это приложение (я еще не попал в локальное хранилище баз данных и т. Д., Но, может быть, мне следует? Просто хотел сначала разобраться с Backbone).Это обычные веб-страницы, поэтому они являются просто страницами контента, загружаемого в различные части веб-приложения.

Я использую представления.Я думаю, что у меня есть концепция ... Заполните коллекцию данными, и представление построено вокруг этой коллекции данных.Я понимаю, что для отдельного экземпляра модели у него есть представление.Затем, когда вы захотите просмотреть коллекцию модели, вы можете вызвать View, который будет перебирать коллекцию, и вызывать View каждой отдельной модели.

Извините, я знаю, что, вероятно, не имеет особого смысла!

Но в основном я вижу, что базовые представления используются для генерации HTML для отдельной модели, для коллекции модели ... так что это все небольшие представления, отсортированные по различным частям страницы, но как насчет представления длявсю страницу?Скажем, у этого приложения HTML5 был базовый шаблон, но разные страницы веб-приложения нуждались в разном макете всей страницы, чтобы они могли выглядеть так, как должны?Вы можете делать такие вещи?В основном, с представлением, которое вызывает Ajax для получения всего шаблона страницы?

В приведенном ниже примере это представление, которое вызывается из основного конструктора, когда URL находится в корне приложения.Я хочу настроить различные представления, подобные этому, которые мое приложение должно будет показывать, когда пользователь находится по разным URL-адресам.Это неправильно загружать в целом шаблон Ajax, как я здесь?Какие еще есть способы иметь одностраничное приложение, но также иметь управляемые шаблоны страниц для всех разных частей сайта?

App.View.Home = Backbone.View.extend({
    tagName: "article",
    id: "view-home",
    initialize: function() {
        _.bindAll(this, "render");
    },
    render: function() {

        var that = this;

        $.get("templates/home.html", function(templateHtml) {
            $(that.el).html(_.template(templateHtml));

            // we want tabs in this template too
            var tabs = new App.View.Tabs();
            $(that.el).find('#main').html(tabs.render().el);

        }, "html");

        return that;
    },
});

Извините, если в этом нет особого смысла ...Я пытался многому научиться.

Ответы [ 2 ]

1 голос
/ 29 марта 2011

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

Что касается этой конкретной проблемы, я не вижу причин, почему вы не должны делать то, что вы делаете здесь. Я бы определенно позаботился о том, чтобы вы не загружали / не выбирали какие-либо данные или шаблоны до того, как они вам понадобятся. Я бы также позаботился о том, чтобы вы подождали, пока у вас не будут все необходимые данные с сервера, прежде чем рендерить представление (чтобы представление не загружалось прерывисто). Эти последние пункты являются лишь ориентировочными и не имеют никакого отношения к магистрали. Но, честно говоря, это одна из функций магистрали: она хорошо справляется с некоторыми задачами, а затем уходит с вашего пути.

0 голосов
/ 29 марта 2011

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

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

Каждый вид может отображать разметку для данного div, скажем.

Затем контроллер может создать несколько представлений, например: -

App.Controllers.X = Backbone.Controller.extend({
   ....
   index: function() {
      new App.Views.View1({
         el: 'div#id1,
         ...
      });
      new App.Views.View2({
         el: 'div#id2,
         ...
      });
etc
   }

Надеюсь, это поможет

...