很抱歉这个noobie问题,但我一直在搜索关于阴影变量的所有现有答案,但仍无法使我的代码正常工作
export default Ember.ArrayController.extend({
actions: {
generateInvoice: function() {
var amount1; // declare a variable
var amount2;
this.store.find('product', 1).then(function(obj){
amount1 = 100; //assign value to the amount variable
});
this.store.find('product', 2).then(function(obj){
amount2 = 200;
});
console.log(amount1); // undefined!
console.log(amount2); // undefined!
$.post('http://nzud.co.nz/invoice',{
foo1: amount1, //access variable amount ---doesn't work!!
foo2: amount2
} ).done(function(data){
alert("success!");
})
}
}
});
我已经尝试了很多方法,但仍然无法将模型记录属性存储到变量中并从$.post
有效负载
答案 0 :(得分:2)
要继续使用变量new值,您必须将代码放在promisse then
中。然后它会工作:
export default Ember.ArrayController.extend({
actions: {
generateInvoice: function() {
this.store.find('product', 1).then(function(obj){
var amount = 100; //assign value to the amount variable
$.post('http://nzud.co.nz/invoice',{
foo: amount
}).done(function(data){
alert("success!");
})
});
}
}
});
这是因为方法find
是异步的,所以你必须在回调函数中处理它的结果,在这种情况下是函数then
。 generateInvoice
范围内的所有内容(可能)都会在find
方法请求结束之前被调用,即使它是第一个在其中调用的方法。
<强>更新强>
我对find
的两个product, 1
方法没有明白你的意思,但是:
如果请求中有两个值要发送到帖子,则只应使用find()
方法一次:
this.store.find('product', 1).then(function(obj){
var amount = 100; //assign value to the amount variable
$.post('http://nzud.co.nz/invoice',{
foo: amount,
bar: another_value
})
});
或者,如果您必须调用两个不同的find
方法,则必须将它们链接起来:
this.store.find('product', 1).then(function(obj){
var amount = 100; //assign value to the amount variable
this.store.find('product', 1).then(function(obj){
var another_amount = 100; //assign value to the amount variable
$.post('http://nzud.co.nz/invoice',{
foo: amount,
bar: another_amount
})
});
});
答案 1 :(得分:-1)
在你的函数之外声明数量:
var amount; // declare a variable
export default Ember.ArrayController.extend({
actions: {
generateInvoice: function() {
this.store.find('product', 1).then(function(obj){
amount = 100; //assign value to the amount variable
});
console.log(amount) // undefined!
$.post('http://nzud.co.nz/invoice',{
foo: amount, //access variable amount ---doesn't work!!
} ).done(function(data){
alert("success!");
})
}
}
});