Я не понимаю, как поделиться какой-то «одиночной» моделью объектов приложения, состоящей из одного взгляда, с помощью браузера. Книги и учебники часто используют глобальное пространство имен, таких как:Browserify + Backbone.js Общий раздел «ApplicationState»
var app = app || {};
У меня есть простой пример приложения, которое состоит из:
app.js
var $ = require('jquery');
var Backbone = require('backbone');
Backbone.$ = $;
var MenuView = require('./views/MenuView');
var ContainerView = require('./views/ContainerView');
new MenuView();
new ContainerView();
MenuView.js
var Backbone = require('backbone');
var ApplicationState = require('../models/ApplicationState');
module.exports = Backbone.View.extend({
el: '#menuView',
events: {
'click .menuLink': 'changePage'
},
changePage: function(event) {
event.preventDefault();
var viewName = $(event.target).attr('data-view');
ApplicationState.set('currentView',viewName);
}
});
ContainerView.js
var Backbone = require('backbone');
var ApplicationState = require('../models/ApplicationState');
module.exports = Backbone.View.extend({
el: '#containerView',
initialize: function() {
this.listenTo(ApplicationState, 'change', this.render);
this.render();
},
render: function() {
this.$el.html(ApplicationState.get('currentView'));
},
close: function() {
this.stopListening();
}
});
Это кажется работает, используя этот подход:
ApplicationState.js вар Backbone = требуется ('позвоночник');
var ApplicationState = Backbone.Model.extend({
defaults: {
currentView: 'TransactionListView'
}
});
module.exports = new ApplicationState();
Действительно ли модуль ApplicationState создан только один раз (кеширование)? Или существует риск воссоздания/сброса модуля?
Какова наилучшая практика для моего варианта использования? Большое спасибо.
Я думаю, это нормально, вы можете проверить, сколько экземпляров ApplicationState будут созданы путем добавления console.count («Состояние приложения») в файле ApplicationState.js и посмотреть вывод в консоли. –
'this. $ El.html (ApplicationState.get ('currentView'));' должно быть, должно быть 'this. $ El.html (ApplicationState.get ('currentView'). $ El);' –