我正在使用eslint修复我的骨干应用程序中的一些编码标准。我在视图中有以下功能(简化代码):
getData: function(foo){
var self = this;
$.when(foo).then(function(){
var doUpdate = false;
self.makeAjaxRequest().done(function(data){
self.trigger(doUpdate === false ? "foo" : "bar");
});
}
}
我需要将三元运算符转换为标准if语句。所以我尝试了这个:
getData: function(foo){
var self = this;
$.when(foo).then(function(){
var doUpdate = false;
self.makeAjaxRequest().done(function(data){
self.trigger(function(){
if(doUpdate === false) {
return "foo";
}
return "bar";
});
});
}
}
不幸的是,它似乎在代码中引起了问题。我想知道我是否正确引用了doUpdate。我在这次转换中哪里出错了?
答案 0 :(得分:3)
在原始代码中,使用值trigger
或"foo"
调用"bar"
。
在更新后的代码中,trigger
被称为,其功能为。
你从未调用过用条件替换条件的函数。
我会保留条件版本,但是如果您想使用替代方案,调用您的函数:
getData: function(foo){
var self = this;
$.when(foo).then(function(){
var doUpdate = false;
self.makeAjaxRequest().done(function(data){
self.trigger(function(){
if(doUpdate === false) {
return "foo";
}
return "bar";
}());
// ^^--------------- Note
});
}
}
如果你需要删除条件,我不会这样做。代替:
getData: function(foo){
var self = this;
$.when(foo).then(function(){
var doUpdate = false;
self.makeAjaxRequest().done(function(data){
var triggerWith;
if (doUpdate === false) {
triggerWith = "foo";
} else {
triggerWith = "bar";
}
self.trigger(triggerWith);
});
}
}
旁注:除非您确实需要专门检查false
而不是其他各种虚假值,这在该代码中似乎不是这样,只是<{1}}而不是if (!doUpdate)
是通常的方式。
答案 1 :(得分:2)
为什么不在调用self.trigger
之前直接使用if子句?
self.makeAjaxRequest().done(function(data) {
if (doUpdate) {
self.trigger("bar");
} else {
self.trigger("foo");
}
});
答案 2 :(得分:0)
我的Backbone上有点生疏,但是不可能使用带有函数作为参数的`Backbone.Events.trigger。你可以然后把它变成一个生命(或使它成为一个命名函数)。
self.trigger((function(){
if(doUpdate === false) {
return "foo";
}
return "bar";
}()));
或作为命名函数
function getUpdateEventName(doUpdate) {
if(doUpdate === false) {
return "foo";
}
return "bar";
}
self.trigger(getUpdateEventName(doUpdate));