我的内部有一个if
函数。如果if
返回false
我需要重复执行功能
this.reloadComment = function () {
var previous_comment = self.Comment();
$.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
if (data.Comment.ID != previous_comment.ID) {
self.Comment(data.Comment);
} else {
// repeat
}
});
};
答案 0 :(得分:1)
如果函数中的self
是this
不在其中,那么只需:
} else {
// repeat
self.reloadComment();
}
如果没有,请使用命名函数;然后,因为你有一个好的名字,你可以使用,当你需要重复它时调用它:
function reloadComment() {
var previous_comment = self.Comment();
$.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
if (data.Comment.ID != previous_comment.ID) {
self.Comment(data.Comment);
} else {
// repeat
reloadComment();
}
});
}
this.reloadComment = reloadComment;
如果您不需要支持IE8,可以使用一个名为的函数表达式来执行此操作:
this.reloadComment = function reloadComment() {
var previous_comment = self.Comment();
$.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
if (data.Comment.ID != previous_comment.ID) {
self.Comment(data.Comment);
} else {
// repeat
reloadComment();
}
});
};
...但是在IE8(及更早版本)you'd end up with two copies of that function, not one;如果你做了很多,最终会浪费。 (但在这个特殊情况下不会产生任何其他差异;它仍然可以正常工作。还有其他情况, 会产生影响,所以我完全避免使用需要处理IE8的代码中的NFE。)
答案 1 :(得分:1)
试一下
this.reloadComment = function () {
var me = this;
var previous_comment = self.Comment();
$.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
if (data.Comment.ID != previous_comment.ID) {
self.Comment(data.Comment);
} else {
me.reloadComment();
}
});
};