jQuery условно отличается разрешением
У меня есть 2 модельных объекта и вид. Я использую отложенный, чтобы решить эти. Теперь, когда представление всегда будет там, у меня может быть один или оба объекта модели для разрешения в зависимости от условия. Ниже приведен код;
var self = this,
myDeferred1 = new $.Deferred(),
myDeferred2 = new $.Deferred(),
viewDeferred = new $.Deferred();
if (typeof personId !== "undefined") {
var myObj1 = new MyObj1({
attr1 : attrId1,
attr2 : personId
});
myObj1.fetch({
success: function() {
myDeferred1.resolve(myObj1);
}
});
}
var myObj2 = new MyObj2({
attr1 : attrId1
});
myObj2.fetch({
success: function() {
myDeferred2.resolve(myObj2);
}
});
require(['myView'], function(MyView) {
viewDeferred.resolve(MyView);
});
$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {
});
У меня такой вопрос, поскольку myDeferred1 будет отображаться только условно (typeof personId!== "undefined")
как проверить то же самое при выполнении
$.when(myDeferred1, myDeferred2, viewDeferred).then(функция (myObj1, myObj2, MyView)
Должен ли я повторить код, выполнив, если..else... как показано ниже ИЛИ есть ли лучший способ сделать это?
if (typeof personId !== "undefined") {
$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {
});
} else {
$.when(myDeferred2, viewDeferred).then(function(myObj2, MyView) {
});
}
1 ответ
Вы можете добавить else
пункт, чтобы решить myDeferred1
немедленно.
if (typeof personId !== "undefined") {
//... as in question
} else {
myDeferred1.resolve({});
}
Разрешив с пустым простым объектом, вы можете проверить myObj1.attr1
а также myObj1.attr2
, не бросая ошибку.
Например:
$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {
if(myObj1.attr1 && myObj1.attr2) {
// personId *was not* undefined
} else {
// personId *was* undefined
}
});
Или если personId
все еще находится в области действия (и гарантированно не изменилось во время асинхронного действия), затем просто проверьте if(personId !== undefined)
снова.