Je ne comprends pas comment partager une sorte de modèle d'objet de maintien d'état d'application "singleton" entre différentes vues, en utilisant browserify. Livres et tutoriels utilisent souvent un espace de noms global tels que:Browserify + Backbone.js Module partagé "ApplicationState"
var app = app || {};
J'ai une application simple exemple qui consiste à:
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();
}
});
Cela semble fonctionner en utilisant cette approche:
ApplicationState.js var Backbone = require ('épine dorsale');
var ApplicationState = Backbone.Model.extend({
defaults: {
currentView: 'TransactionListView'
}
});
module.exports = new ApplicationState();
Le module ApplicationState est-il réellement créé une seule fois (mise en cache)? Ou existe-t-il un risque de recréer/réinitialiser le module?
Quelle est la meilleure pratique pour mon cas d'utilisation? Merci beaucoup.
Je suppose qu'il est ok, vous pouvez vérifier le nombre de cas ApplicationState sera créé en ajoutant console.count ('Application State') dans le fichier ApplicationState.js et voir la sortie dans la console. –
'this. $ El.html (ApplicationState.get ('currentView'));' devrait probablement être 'this. $ El.html (ApplicationState.get ('currentView'). $ El);' –