2013-07-10 4 views
0

Как я могу получить обратный объект из следующей функции JavaScript -Как вернуть значение вложенной функции

function find(model, whereClause, success, error, args) { 
    var tableName = model.prototype.tableName, 
     propertyMap = model.prototype.propertyMap, 
     sql = 'SELECT * FROM ' + tableName, 
     params = null, 
     appendWhere = true, 
     firstParam = true, 
     k, v; 

    if (db) { 
     // websql 
     if (whereClause && whereClause._whereClause) { 
     whereClause.sql = ' ' + whereClause._whereClause; 
     } else { 
     whereClause = getWhereClause(whereClause, propertyMap); 
     } 
     sql = sql + whereClause.sql; 
     params = whereClause.params; 

     if (model.prototype.propertyMap._idx) { 
     sql = sql + ' ORDER BY _idx '; 
     } 

     if (model.prototype.dataLimit) { 
     sql = sql + ' LIMIT ' + model.prototype.dataLimit; 
     } 

     db.readTransaction(function (tx) { 
     tx.executeSql(sql, params, function (tr, result) { 
      var i, collectionType = OB.Collection[model.prototype.modelName + 'List'] || Backbone.Collection, 
       collection = new collectionType(), 
       len = result.rows.length; 
      if (len === 0) { 
      success(collection, args); 
      } else { 
      for (i = 0; i < len; i++) { 
       collection.add(transform(model, result.rows.item(i))); 
      } 
      if(success){ 
      success(collection, args); 
      } else { 
      return collection 
      } 
      } 
     }, error); 
     }); 
    } else { 
     // localStorage 
     throw 'Not implemented'; 
    } 
    } 

Я хочу переменную коллекции в tx.executeSql() из db.readTransaction чтобы вернуться, когда я вызвать функцию Find() как

OB.Dal.find(OB.Model.OutletSection, null, null, null, null) 

ответ

1

Вы должны вызвать функцию поиска, как это:

OB.Dal.find(OB.Model.OutletSection, null, function(collection, args){ 

    alert('Collection variable: '+collection); 

}, null, null); 
+0

Спасибо за ваш ответ, на самом деле я пытаюсь получить результат, что-то вроде var result = OB.Dal.find (OB.Model.OutletSection, null, null, null, null); –

+1

В соответствии с тем, как реализована функция «Найти», вы не можете. Ваше возвращение внутри функции (tr, result) ... внутри функции (tx). Вы не можете поймать возвращаемое значение таким образом. Эти методы построены для использования асинхронным способом. Вы должны написать свой код, заменив мое «предупреждение»: var result = collection; .... ;-) –

+0

Хорошо, Thanx для информации .. :) –