backbone marionette 将变量传递给视图方法
backbone marionette pass variable to view method
我的情况很简单,无法理解为什么我传递给函数的变量总是未定义。
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”。下一步我想通过 "data" 但现在我意识到我不能通过任何东西。
您丢失了 $.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
...
},
...
});
由于您在 $.getJSON
的 return 上调用 renderProgress
,您可以简单地提供对 return 的 done()
方法的函数引用编辑 jQuery 承诺。您的代码将如下所示:
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()
[=12] 的一个版本=] 绑定到视图上下文:
$.getJSON('service/api.php/projects/' + id + '/progress')
.done(_.bind(this.renderProgress, this));
其中 _.bind
是一个 UnderscoreJS 函数。阅读更多相关信息 here。
您无权访问“$.getJSON(”中的 this 将其分配给任何变量,然后调用 "renderProgress" 方法。
var currentObj = this;
$.getJSON('service/api.php/projects/' + id + '/progress').done(function (data) {
currentObj .renderProgress('4'); //<== pass here
});
因为在你的例子中 this 指向该函数的当前对象而不是视图对象。
我的情况很简单,无法理解为什么我传递给函数的变量总是未定义。
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”。下一步我想通过 "data" 但现在我意识到我不能通过任何东西。
您丢失了 $.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
...
},
...
});
由于您在 $.getJSON
的 return 上调用 renderProgress
,您可以简单地提供对 return 的 done()
方法的函数引用编辑 jQuery 承诺。您的代码将如下所示:
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()
[=12] 的一个版本=] 绑定到视图上下文:
$.getJSON('service/api.php/projects/' + id + '/progress')
.done(_.bind(this.renderProgress, this));
其中 _.bind
是一个 UnderscoreJS 函数。阅读更多相关信息 here。
您无权访问“$.getJSON(”中的 this 将其分配给任何变量,然后调用 "renderProgress" 方法。
var currentObj = this;
$.getJSON('service/api.php/projects/' + id + '/progress').done(function (data) {
currentObj .renderProgress('4'); //<== pass here
});
因为在你的例子中 this 指向该函数的当前对象而不是视图对象。