2013-08-19 71 views
1

如果这是一个已经存在的主题,但我真的不知道我应该真正搜索我的问题。公共变量没有正确更改

我尝试从Parse.com数据库接收功能内的功能getHighestObjectId一个编号:

Einstellen.js:

EinstellenStart.Einstellen = (function() { 
    var that = {}, 

    anbieterId = null, 
    vermieterId = null, 
    objektId = null, 

    writeObjekt = function(objekt, o_id, a_id, v_id) { 
     console.log(objekt.ort); 

     var objektData = Parse.Object.extend(objekt.ort); 
     var newObjekt = new objektData(); 


       newObjekt.set("Strasse", objekt.strasse); 
       newObjekt.set("Hausnummer", parseInt(objekt.hausnummer)); 
       newObjekt.set("PLZ", parseInt(objekt.plz)); 
       //newObjekt.set("Ort", objekt.ort); 
       newObjekt.set("ID", o_id); 
       newObjekt.set("Einsteller_id", a_id); 
       newObjekt.set("Vermieter_id", v_id); 
       newObjekt.set("Miete", parseInt(objekt.miete)); 
       newObjekt.set("Nebenkosten", parseInt(objekt.nebenkosten)); 
       newObjekt.set("Kaution", parseInt(objekt.kaution)); 
       newObjekt.set("Flaeche", parseInt(objekt.flaeche)); 
       newObjekt.set("Zimmer", parseInt(objekt.zimmer)); 
       newObjekt.set("Freitext", objekt.freitext); 
       newObjekt.set("Gesamtmiete", parseInt(objekt.miete+objekt.nebenkosten)); 


       newObjekt.save(null, { 
        success: function(newObjekt) { 
        console.log("Successfully created " + newObjekt); 
        }, 
        error: function(newObjekt, error) { 
        // Execute any logic that should take place if the save fails. 
        // error is a Parse.Error with an error code and description. 
        alert('Failed to create new object, with error code: ' + error.description); 
        } 
       }); 


    }, 



    writeAnbieter = function(anbieter, a_id) { 

     var newAnbieter = new anbieterData(); 



       newAnbieter.set("Vorname", anbieter.vorname.toString()); 
       newAnbieter.set("Nachname", anbieter.nachname.toString()); 
       newAnbieter.set("Strasse", anbieter.strasse.toString()); 
       newAnbieter.set("Hausnummer", parseInt(anbieter.hausnummer)); 
       newAnbieter.set("PLZ", parseInt(anbieter.plz)); 
       newAnbieter.set("Ort", anbieter.ort.toString()); 
       newAnbieter.set("Telefon", parseInt(anbieter.telefon)); 
       newAnbieter.set("Email", anbieter.email.toString()) 
       newAnbieter.set("ID", a_id); 

       newAnbieter.save(null, { 
        success: function(newAnbieter) { 

        }, 
        error: function(newAnbieter, error) { 
        // Execute any logic that should take place if the save fails. 
        // error is a Parse.Error with an error code and description. 
        alert('Failed to create new object, with error code: ' + error.description); 
        } 
       }); 


    }, 

    writeVermieter = function(vermieter, a_id) { 

     var newVermieter = new vermieterData(); 



       newVermieter.set("Vorname", vermieter.vorname.toString()); 
       newVermieter.set("Nachname", vermieter.nachname.toString()); 
       newVermieter.set("Strasse", vermieter.strasse.toString()); 
       newVermieter.set("Hausnummer", parseInt(vermieter.hausnummer)); 
       newVermieter.set("PLZ", parseInt(vermieter.plz)); 
       newVermieter.set("Ort", vermieter.ort.toString()); 
       newVermieter.set("Telefon", parseInt(vermieter.telefon)); 
       newVermieter.set("Email", vermieter.email.toString()) 
       newVermieter.set("ID", a_id); 

       newVermieter.save(null, { 
        success: function(newVermieter) { 

        }, 
        error: function(newVermieter, error) { 
        // Execute any logic that should take place if the save fails. 
        // error is a Parse.Error with an error code and description. 
        alert('Failed to create new object, with error code: ' + error.description); 
        } 
       }); 

    }, 

    getHighestObjektId = function(objekt, callback) { 

     var objektData = Parse.Object.extend(objekt); 

     var id__objekt_query = new Parse.Query(objektData); 

     id__objekt_query.exists("ID"); 
     id__objekt_query.descending("ID"); 
     id__objekt_query.first({ 
      success: function(object) { 

      callback(parseInt(object.get('ID')) + 1); 
      //objektId = parseInt(object.get('ID')) + 1; 
      console.log(objektId); 

      }, 
      error: function(error) { 
      alert("Error: " + error.code + " " + error.message); 
      } 
     }); 



     console.log(objektId); 

     return objektId; 

    }, 

    getHighestAnbieterId = function() { 

     var id__anbieter_query = new Parse.Query(anbieterData); 

     id__anbieter_query.exists("ID"); 
     id__anbieter_query.descending("ID"); 
     id__anbieter_query.first({ 
      success: function(object) { 

      anbieterId = parseInt(object.get('ID')) + 1; 


      }, 
      error: function(error) { 
      alert("Error: " + error.code + " " + error.message); 
      } 
     }); 

     console.log("anbieter:" + anbieterId); 

     return anbieterId; 
    }, 

    getHighestVermieterId = function() { 

     var id_vermieter_query = new Parse.Query(vermieterData); 

     id_vermieter_query.exists("ID"); 
     id_vermieter_query.descending("ID"); 
     id_vermieter_query.first({ 
      success: function(object) { 

      vermieterId = parseInt(object.get('ID')) + 1; 


      }, 
      error: function(error) { 
      alert("Error: " + error.code + " " + error.message); 
      } 
     }); 

     return vermieterId; 
    }, 



    setupParse = function() { 
     Parse.initialize("REsOHm341bAXyLksjPxBq0AX0wfHs2DZVvZsjEEF", "9uQb8PLO8UZAG8rzWMxL0vGYdfaEd3zru6it73bS"); 

     anbieterData = Parse.Object.extend("Anbieter"); 
     vermieterData = Parse.Object.extend("Vermieter"); 



    }, 

    init = function() { 
     console.log("init Einstellen.js") 
     setupParse(); 
     getHighestAnbieterId(); 
     getHighestVermieterId(); 


     return that; 
    }; 

    that.getHighestObjektId = getHighestObjektId; 
    that.getHighestAnbieterId = getHighestAnbieterId; 
    that.getHighestVermieterId = getHighestVermieterId; 
    that.writeObjekt = writeObjekt; 
    that.writeVermieter = writeVermieter; 
    that.writeAnbieter = writeAnbieter; 
    that.init = init; 

    return that; 
})(); 

我打电话从另一个脚本功能:

EinstellenStart.EinstellenController = (function() { 
    var that = {}, 
    einstellen = null, 
    einstellenView = null, 
    objektId = null, 
    o_id = null, 
    a_id = null, 
    v_id = null, 
    stadt = null, 



    init = function() { 

     einstellen = EinstellenStart.Einstellen.init(); 

     einstellenView = EinstellenStart.EinstellenView.init(); 
     $(einstellenView).on("setNewObject", onSetNewObject); 


    }, 


    onSetNewObject = function(event) { 

     v_id = einstellen.getHighestVermieterId(); 
     a_id = einstellen.getHighestAnbieterId(); 

     var anbieter = einstellenView.getAnbieterFormData(); 
     var vermieter = einstellenView.getVermieterFormData(); 
     var objekt = einstellenView.getObjektFormData(); 

     einstellen.getHighestObjektId(objekt.ort, function(o_id) { 
      o_id = objektId; 
      console.log(o_id + "onSetNewObject"); 
     }); 


     einstellen.writeAnbieter(anbieter, a_id); 
     einstellen.writeVermieter(vermieter, v_id); 
     einstellen.writeObjekt(objekt, o_id, a_id, v_id); 

    }; 


    that.init = init; 

    return that; 
})(); 

现在我的问题。值objektId被正确接收。 query.first函数内的日志输出在控制台中返回正确的值。

但第二个日志也返回null和整个函数。 我只是不明白为什么公共变量在函数中被改变,但之后再次为空。

任何想法?

+2

欢迎** **异步的奇妙世界!你不能那样做;你需要使用回调来返回。 – SLaks

+0

是不是他定义的变量在'.first()'函数的局部范围内的主要问题? –

回答

1

这是因为你处理的上下文的异步性质,呼叫在success回调中完成,重点在于当第二个console.log被调用时,呼叫可能没有完成,所以即使你在最顶层声明objektId,你仍然没有得到你所期望的,但是你初始化它的值。

一个可能的答案可能是

getHighestObjektId = function(objekt, callback) { 
    // your code... 

    success: function(object) { 
     callback(parseInt(object.get('ID')) + 1); 
    } 

    // rest of your code 

您将这样调用

getHighestObjektId(objekt, function(objektId) { 
    // here you can deal with objektId 
}); 
+0

好吧,我添加了这个,现在两个控制台输出都是空的:D – Igle

+0

我发布了整个脚本。我认为我在回调方面出了问题。另一个有趣的问题是,其他函数getAnbieterId和getVermieterId会正确返回值:/ – Igle

+0

确保调用返回正确的数据。 –