我正在尝试加载把手模板并通过延迟对象/承诺渲染它们,但是当我通过放入延迟重构代码时,错误正在发生:
我的观点如下:
var indexView = Backbone.View.extend({
initialize: function (options) {
this.options = options || {};
manager.getTemplate('path/to/template').then(function(tpl){
// tpl is a handlebar compiled template,returned by getTemplate
this.template = tpl;
this.render();
// that causes
// Uncaught TypeError: Object #<Object> has no method 'render'
// "this" is Backbone.View.extend.initialize
});
},
render: function (){
// this.options is undefined
this.$el.html(this.template(this.options.data));
return this;
}
});
我无法理解我应该如何从.then()函数到达this.render以及为什么在render()函数中this.options现在是未定义的 谢谢
答案 0 :(得分:1)
谨防恶意this
!调用延迟函数时可能不是您认为的那样,尤其是涉及jQuery的情况。
尝试
initialize: function (options) {
this.options = options || {};
var myself = this;
manager.getTemplate('path/to/template').then(function(tpl){
// tpl is a handlebar compiled template,returned by getTemplate
myself.template = tpl;
myself.render();
});
}