Как представление узнает о своей модели (ях)? - PullRequest
0 голосов
/ 25 февраля 2012

Я работаю над приложением BackboneJS. Один из случаев, над которым я работаю, который, кажется, не хочет вписываться в настройку MVC (или, более вероятно, мое понимание MVC не охватывает, где это поставить), заключается в следующем.

У меня есть коллекция моделей, представляющих картинки. Скажем, для этого примера, 100 из них. У меня есть контроллер, который сообщает представлению о необходимости загрузки этих моделей, поскольку он показывает картинки страница за страницей ... так что на странице 1 отображаются первые десять и т. Д.

Вопрос здесь заключается в том, должен ли контроллер сообщать представлению «Вот ваши модели», или представлению следует знать «Я получаю свои модели из __ , и мне нужно выбрать подмножество». из них". «И» это то, что беспокоит меня. Контроллер знает, что «пользователь запросил первую страницу моделей», поэтому более естественно сказать, что «вот выбор моделей, которые запрашивал пользователь».

Это правильный путь?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

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

public class Gallery
{
    public List<string> ImageUrls { get; set; }
}

Теперь ваш контроллер будет передавать объект Gallery в ваш View в качестве своей модели, а View будет иметь все URL-адреса изображений ВНУТРИ объекта Model. Но объект Model - это только один объект, в котором должны содержаться все ваши изображения (и вся другая информация для этого представления).

Вы правы в том, что хотите, чтобы ваш контроллер решал, какие изображения отображать, и ОТПРАВЛЯЛ их на просмотр. Обычно эмпирическое правило состоит в том, чтобы модели были просто структурой данных, представления - просто отображением данных, а контроллеры - мозгом, и все вычисления должны выполняться. Это не обязательно универсально вообще, особенно когда вы начинаете иметь дело со сторонними сервисами. Но не будем отвлекаться.

Надеюсь, это поможет, и вы получите лучшее представление о том, как организованы веб-сайты MVC. Позвольте мне знать, если у вас есть еще вопросы! :)

0 голосов
/ 25 февраля 2012

Организация ваших моделей Backbone может выглядеть следующим образом ...

var Image = Backbone.Model.extend({
    url: 'place/where/images/are'
});

var Images = Backbone.Collection.extend({
    model: Image
});

var ImageView = Backbone.View.extend({
    initialize: function(){
        this.collection.bind('add', this.render, this);
        this.collection.fetch({
           data: {
               // Send whatever you need to the server
           }
        });
    },
    render: function(model){
        // do something with the added model
    }
});

var myImageView = new ImageView();

Таким образом, ваша коллекция знает, где взять данные, и представление выполняет вызов на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...