Backbone.js查看实例变量?

我正在学习Backbone.js并试图弄清楚是否可以在Backbone视图中使用实例变量。

我的目标是在实例化视图时从外部文件加载视图的模板。 目前我将它们存储在Backbone应用程序的全局命名空间中的全局变量中,但将模板存储在视图的实例变量中会更简洁。 目前我的设置如下:

var templates = {}; MessageView = Backbone.View.extend({ initialize: function() { $.get('js/Test2Templates.tpl', function(doc) { var tmpls = $(doc).filter('template'); templates['MessageView'] = []; tmpls.each(function() { templates.MessageView[this.id] = $.jqotec($.unescapeHTML(this.innerHTML)); }); }); }, render: function() { var tpldata = {name: 'Ville', thing: 'Finland'}; $('#display').jqoteapp(templates.MessageView.greeting_template, tpldata); }, events: { "click input[type=button]": "additionalTransactions" }, additionalTransactions: function() { this.render(); } }); 

但是我没有使用“模板”定义为全局变量,而是想在视图的初始化函数中创建“模板”,沿着这些行(但这不起作用):

 MessageView = Backbone.View.extend({ view_templates: {}, initialize: function() { $.get('js/Test2Templates.tpl', function(doc) { var tmpls = $(doc).filter('template'); tmpls.each(function() { this.view_templates[this.id] = $.jqotec($.unescapeHTML(this.innerHTML)); }); }); }, render: function() { var tpldata = {name: 'Ville', thing: 'Suomi'}; $('#display').jqoteapp(this.view_templates.greeting_template, tpldata); }, events: { "click input[type=button]": "additionalTransactions" }, additionalTransactions: function() { this.render(); } }); 

这可能(?)非常直接和/或显而易见,但我在Backbone.js学习曲线上的某个地方,我非常感谢任何帮助! 谢谢!

你的view_templates实例变量很好(也是一个好主意)。 你只需要确保在$.get()回调中和tmpls.each()调用中使用了正确的。 我想你希望你的initialize看起来更像这样:

 initialize: function() { this.view_templates = { }; var _this = this; $.get('js/Test2Templates.tpl', function(doc) { var tmpls = $(doc).filter('template'); tmpls.each(function() { _this.view_templates[this.id] = $.jqotec($.unescapeHTML(this.innerHTML)); }); }); }, 

我不确定你想在tmpls.each()哪个this.id但是我猜你想从当前模板中获取DOM id属性所以我把它this.id

this.view_templates在构造函数( initialize )中进行this.view_templates赋值,因为您可能希望视图的每个实例都拥有自己的数组副本。 创建新的视图实例不会对视图执行深层复制,因此如果您只有:

 MessageView = Backbone.View.extend({ view_templates: {}, // ... 

然后所有实例最终将共享相同的view_templates对象,并且view_templates将更像是类变量而不是实例变量。

您可以在视图定义中指定实例变量(即Backbone.View.extend()调用)作为文档forms,但是您需要初始化任何应该在initialize方法中作为实例变量运行的实例变量; 像events这样的只读或“类变量”可以保留为视图定义的一部分。