我有一个包含多个属性和方法的javascript对象。我想在第二种方法中调用第一种方法,以获得比萨饼的默认配料数量并将其与另一种值进行比较。但是,我发现在第二种方法的比较中存在无值。
关于这个问题的Google搜索,我看到我必须在第一种方法中进行回调,但它对我不起作用。那么,当第二种方法中的“click”事件发生时,如何确保属性obj.app.defaultIngredients
将具有JSON返回的值?而且,在那一刻,我可以比较你在第二种方法中看到的值吗?
有我的(不工作)代码:
obj = {};
obj.app = {
defaultIngredients: '',
getDefaultIngredientsNumber: function() {
$.getJSON('/sites/all/json/pizza.json', function(data) {
var node = $('.node').attr('data-nid'),
node = 'node-' + node; // returns something like 'node-3'
$.each(data, function(key, val) {
// This returns an integer
obj.app.defaultIngredients = parseInt(data[node].general.default_ingredients);
});
}).done(function() {
return obj.app.defaultIngredients;
});
},
customAddToCart: function() {
$('#button').click(function(){
var defaultIngredients = obj.app.getDefaultIngredientsNumber();
var selectedIngredients = 0;
if defaultIngredients >= selectedIngredients) {
alert('Add some ingredients');
}
}
}
};
对此的一些帮助将非常渺茫。
答案 0 :(得分:1)
getDefaultIngredientsNumber: function(callback) {
$.getJSON('/sites/all/json/pizza.json', function(data) {
var node = $('.node').attr('data-nid'),
node = 'node-' + node; // returns something like 'node-3'
$.each(data, function(key, val) {
obj.app.defaultIngredients = parseInt(data[node].general.default_ingredients);
});
callback(obj.app.defaultIngredients)
})
},
customAddToCart: function() {
$('#button').click(function(){
obj.app.getDefaultIngredientsNumber(function(defaultIngredients) {
var selectedIngredients = 0;
if (defaultIngredients >= selectedIngredients) {
alert('Add some ingredients');
}
})
})
}
答案 1 :(得分:0)
我可能会遗漏一些东西,因为看起来太容易了..
});
}).done(function(data) {
return anotherfunction(data);
});
或者代替:
customAddToCart: function() {
$('#button').click(function(){
var defaultIngredients = obj.app.getDefaultIngredientsNumber();
var selectedIngredients = 0;
if defaultIngredients >= selectedIngredients) {
alert('Add some ingredients');
}
}
}
};
我会用这个:
customAddToCart: function() {
$('#button').click(function(){
obj.app.getDefaultIngredientsNumber("alert");
}
}
};
在getDefaultIngredientsNumber中,我会检查是否设置了警报,然后执行警报..