【发布时间】:2014-10-22 12:36:23
【问题描述】:
我不明白如何使用 browserify 在不同视图之间共享某种“单例”应用程序状态保持对象模型。 书籍和教程通常使用全局命名空间,例如:
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 var Backbone = require('backbone');
var ApplicationState = Backbone.Model.extend({
defaults: {
currentView: 'TransactionListView'
}
});
module.exports = new ApplicationState();
ApplicationState 模块真的只创建一次(缓存)吗? 还是有重新创建/重置模块的风险?
我的用例的最佳做法是什么?非常感谢。
【问题讨论】:
-
我想没关系,您可以通过在 ApplicationState.js 文件中添加 console.count('Application State') 来检查将创建多少个 ApplicationState 实例并在控制台中查看输出。
-
this.$el.html( ApplicationState.get('currentView') );应该是this.$el.html( ApplicationState.get('currentView').$el );
标签: javascript node.js backbone.js browserify commonjs