我有以下代码:
require([templateName], function(template, view){
console.log(this); // outputs Window object
this.renderTemplate(template, {
articles: this.collection.toJSON() // rises error
});
});
现在为了完成这项工作,我需要改变'this'上下文,因为它不在其中。如何实现呢?
///编辑 - 完整代码
define(['jquery', 'backbone', 'underscore', 'article/collections/Articles', 'generic-view-decorator','error-handler-decorator'],
function($, Backbone, _, ArticlesCollection, GenericViewDecorator, ErrorHelperDecorator) {
var ArticleView = Backbone.View.extend({
initialize: function(config) {
this.initializeCollection(ArticlesCollection, this.buildResourceUrl({
domain : 'oskszu.vgnett.no',
path : 'vgnett-dt/'+config.config.section + '/json',
query : [{
key : 'limit',
val : config.config.limit
}]
}));
this.initializeErrorCapturing(this.collection);
},
render: function() {
if(!this.collection.length) {
this.trigger('error-600');
} else {
var templateName = 'text!widgets/widgets/article/templates/article.tpl';
require([templateName]).call(this, function(template){
console.log(this);
/*this.renderTemplate(template, {
articles: this.collection.toJSON()
});*/
}, this);
}
}
});
_.extend(ArticleView.prototype, GenericViewDecorator);
_.extend(ArticleView.prototype, ErrorHelperDecorator);
return ArticleView;
}
);
答案 0 :(得分:0)
好的,我已经通过以下方式解决了这个问题(对于后代;)):
render: function() {
if(!this.collection.length) {
this.trigger('error-600');
} else {
var templateName = 'text!widgets/widgets/article/templates/article.tpl';
require([templateName], (function(template){
console.log(this);
/*this.renderTemplate(template, {
articles: this.collection.toJSON()
});*/
}).call(this));
}
}