Веб-приложение Backbone.js - состояние, история и управление данными - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь создать нечто похожее на то, что показано на рисунке ниже.

Государственный и исторический менеджмент
Я хочу иметь возможность сериализовать текущее состояние в любое время в приложении и предпочтительно иметь возможность изменять эти параметры.
1) Прежде всего, что является хорошим способом переопределения параметров defaultState с любыми допустимыми параметрами, указанными в хэше?

defaultState = {
    mode : "2up", //Defines layout and how many widgets to init
    models : [{year: 1980, selected: "SE"}, 
              {year: 2010, selected: "NO"}] //Widget models
}

var AppRouter = Backbone.Router.extend({                            
routes: {
    '': 'hashChangeHandler',
    'v1?:params': 'hashChangeHandlerV1'
},

hashChangeHandlerV1: function(params) {
    //here do something to override defaultState with params on init
    //set models and layout etc.
}
});

//Handle history entries separately??
collection.bind("change", updateHistory)

function updateHistory () {
    //each model toJSON(), then jQuery.param.querystring etc.  
    appRouter.navigate('v1' + state, false);
}

2) Может ли вышеизложенное быть допустимым способом создания версий? (Наличие определенного обработчика для маршрута v1 и другого для v2, если параметры состояния / API изменяются?) Если бы вы могли привести пример решения состояния / истории, которое будет работать для этого приложения для визуализации с использованием виджетов, я был бы очень рад:)

3) Я бы хотел запретить запись в журнале при перетаскивании таймлайдера и некоторых других событиях. Могу ли я удалить слушатель события collection.change (который отслеживает все экземпляры WidgetModels) при перетаскивании ползунка, или что бы вы предложили?

Управление данными
Перед созданием представлений (и при изменении атрибута выбора их модели) я хотел бы убедиться, что данные (300-400 КБ числовых статистических данных) загружены.
4) Какой типичный способ решения этой проблемы в Backbone? (т.е. откладывание событий model.trigger до тех пор, пока атрибуты не станут стабильными.)

enter image description here

1 Ответ

0 голосов
/ 18 октября 2011

4 - дождитесь загрузки моделей и только после этого создайте экземпляры представлений.

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

Если ваши данные загружены в модель, чем при обратном вызове success, равном fetch, вы можете вызвать событие, чтобы сообщить остальной части приложения, что оно было загружено.

Если ваши данные загружены в коллекцию, вы можете прослушать событие reset коллекции.

...