我的情况简单,无法理解为什么我传递给函数的变量总是未定义。
var ProjectItemView = Backbone.Marionette.ItemView.extend({
template: "#ProjectItemTemplate",
initialize: function () {
var id = this.model.get('project_id');
$.getJSON('service/api.php/projects/' + id + '/progress').done(function (data) {
this.renderProgress('4'); //<== pass here
});
},
renderProgress: function (why) {
alert(why); //<== undefined
...
},
...
});
我希望它等于'4'。在下一步我想传递“数据”,但现在我意识到我无法传递任何东西。
答案 0 :(得分:3)
由于您在renderProgress
的返回时调用$.getJSON
,因此您只需提供对返回的jQuery Promise的done()
方法的函数引用。你的代码看起来像这样:
var ProjectItemView = Backbone.Marionette.ItemView.extend({
template: "#ProjectItemTemplate",
initialize: function () {
var id = this.model.get('project_id');
$.getJSON('service/api.php/projects/' + id + '/progress')
.done(this.renderProgress);
},
renderProgress: function (data) {
alert(data);
...
},
...
});
如果您需要renderProgress
中的视图上下文(例如,要引用视图属性),请提供done()
版本renderProgress
&# 39;绑定到视图上下文:
$.getJSON('service/api.php/projects/' + id + '/progress')
.done(_.bind(this.renderProgress, this));
其中_.bind
是UnderscoreJS函数。阅读更多相关信息here。
答案 1 :(得分:0)
你在$ .getJSON完成回调中松开了上下文。试试这个:
var ProjectItemView = Backbone.Marionette.ItemView.extend({
template: "#ProjectItemTemplate",
initialize: function () {
var id = this.model.get('project_id');
var _this = this;
$.getJSON('service/api.php/projects/' + id + '/progress').done(function (data) {
_this.renderProgress('4'); //<== pass here
});
},
renderProgress: function (why) {
alert(why); //<== undefined
...
},
...
});
答案 2 :(得分:0)
您无权访问“$ .getJSON”中的 this (“将此分配给任何变量,然后调用”renderProgress“方法。
var currentObj = this;
$.getJSON('service/api.php/projects/' + id + '/progress').done(function (data) {
currentObj .renderProgress('4'); //<== pass here
});
因为在你的情况下,这指向该函数的当前对象而不是查看对象。