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
这样的只读或“类变量”可以保留为视图定义的一部分。