2013-11-03 29 views
2

嗨Stackoverflow的人!Uncaught TypeError:對象app.data.proxy.CustomSql沒有方法'apply'sencha touch

我編碼煎茶觸摸框架,我必須定義一個覆蓋到Ext.data.proxy.Sql ...

當用戶加載應用,顯示我的下一個錯誤:

Uncaught TypeError: Object App.data.proxy.CustomSql has no method 'apply' ...

的倍率是:

Ext.define('app.data.proxy.CustomSql', {  
    override: 'Ext.data.proxy.Sql', 
    isSQLProxy: false, 
    setSql: function(sql) { 
     this.customSql = sql; 
     console.log('definiendo'); 
    }, 
    getSql: function() { 
     return(this.customSql); 
    }, 
    selectRecords: function(transaction, params, callback, scope) { 
     console.log('seles'); 
     var me = this, 
     table = me.getTable(), 
     idProperty = me.getModel().getIdProperty(), 
     sql = 'SELECT * FROM ' + table, 
     records = [], 
     filterStatement = ' WHERE ', 
     sortStatement = ' ORDER BY ', 
     i, ln, data, result, count, rows, filter, sorter, property, value; 


     result = new Ext.data.ResultSet({ 
     records: records, 
     success: true 
    }); 


    if (!Ext.isObject(params)) { 
     sql += filterStatement + idProperty + ' = ' + params; 
    } else { 
     ln = params.filters && params.filters.length; 
     if (ln) { 
      for (i = 0; i < ln; i++) { 
       filter = params.filters[i]; 
       property = filter.getProperty(); 
       value = filter.getValue(); 
       if (property !== null) { 
        sql += filterStatement + property + ' ' + (filter.getAnyMatch() ? ('LIKE \'%' + value + '%\'') : ('= \'' + value + '\'')); 
        filterStatement = ' AND '; 
       } 
      } 
     } 


     ln = params.sorters && params.sorters.length; 
     if (ln) { 
      for (i = 0; i < ln; i++) { 
       sorter = params.sorters[i]; 
       property = sorter.getProperty(); 
       if (property !== null) { 
        sql += sortStatement + property + ' ' + sorter.getDirection(); 
        sortStatement = ', '; 
       } 
      } 
     } 


     // handle start, limit, sort, filter and group params 
     if (params.page !== undefined) { 
      sql += ' LIMIT ' + parseInt(params.start, 10) + ', ' + parseInt(params.limit, 10); 
     } 
    } 


    console.log(this.customSql);   
    if (this.customSql) { 
     sql = this.customSql; 
     delete this.customSql; 
    } 


    transaction.executeSql(sql, null, 
     function(transaction, resultSet) { 
      rows = resultSet.rows; 
      count = rows.length; 


      for (i = 0, ln = count; i < ln; i++) { 
       data = rows.item(i); 
       records.push({ 
        clientId: null, 
        id: data[idProperty], 
        data: data, 
        node: data 
       }); 
      } 


      result.setSuccess(true); 
      result.setTotal(count); 
      result.setCount(count); 


      if (typeof callback == 'function') { 
       callback.call(scope || me, result); 
      } 
     }, 
     function(transaction, errors) { 
      result.setSuccess(false); 
      result.setTotal(0); 
      result.setCount(0); 


      if (typeof callback == 'function') { 
       callback.call(scope || me, result); 
      } 
     } 
    ); 
}, 

}); 

任何想法? 歡迎任何幫助。

在此先感謝。 ;)

+6

剛一說明:你有一個''最後'Ext.define'右括號'})之前;'這可以打破Sencha – benka

回答

1

通過你的代碼:

  1. selectRecords ()函數你有很多的,代替;

    selectRecords: function(transaction, params, callback, scope) { 
        console.log('seles'); 
        var me = this, 
        table = me.getTable(), 
    ... 
    

    你混合;,
    這是一個函數,你應該總是把;在行的末尾。

    由於@StephenTremaine好心指出的(不知道我怎麼會忽略這一點)上面是不是porblem,作爲一個可以簡單地使用導致在聲明列表中的逗號。

  2. 你有最後Ext.define右括號});

    }, 
    }); 
    

    這是不對的前,

試圖清理和修復你的代碼:

Ext.define('app.data.proxy.CustomSql', { 
    override: 'Ext.data.proxy.Sql', 
    isSQLProxy: false, 
    setSql: function(sql) { 
     this.customSql = sql; 
     console.log('definiendo'); 
    }, 
    getSql: function() { 
     return(this.customSql); 
    }, 
    selectRecords: function(transaction, params, callback, scope) { 
     console.log('seles'); 
     var me = this; 
     table = me.getTable(); 
     idProperty = me.getModel().getIdProperty(); 
     sql = 'SELECT * FROM ' + table; 
     records = []; 
     filterStatement = ' WHERE '; 
     sortStatement = ' ORDER BY '; 
     i, ln, data, result, count, rows, filter, sorter, property, value; 


     result = new Ext.data.ResultSet({ 
      records: records, 
      success: true 
     }); 


     if (!Ext.isObject(params)) { 
      sql += filterStatement + idProperty + ' = ' + params; 
     } else { 
      ln = params.filters && params.filters.length; 
      if (ln) { 
       for (i = 0; i < ln; i++) { 
        filter = params.filters[i]; 
        property = filter.getProperty(); 
        value = filter.getValue(); 
        if (property !== null) { 
         sql += filterStatement + property + ' ' + (filter.getAnyMatch() ? ('LIKE \'%' + value + '%\'') : ('= \'' + value + '\'')); 
         filterStatement = ' AND '; 
        } 
       } 
      } 

      ln = params.sorters && params.sorters.length; 
      if (ln) { 
       for (i = 0; i < ln; i++) { 
        sorter = params.sorters[i]; 
        property = sorter.getProperty(); 
        if (property !== null) { 
         sql += sortStatement + property + ' ' + sorter.getDirection(); 
         sortStatement = ', '; 
        } 
       } 
      } 

      // handle start, limit, sort, filter and group params 
      if (params.page !== undefined) { 
       sql += ' LIMIT ' + parseInt(params.start, 10) + ', ' + parseInt(params.limit, 10); 
      } 
     } 


     console.log(this.customSql); 
     if (this.customSql) { 
      sql = this.customSql; 
      delete this.customSql; 
     } 


     transaction.executeSql(sql, null, 
      function(transaction, resultSet) { 
       rows = resultSet.rows; 
       count = rows.length; 


       for (i = 0, ln = count; i < ln; i++) { 
        data = rows.item(i); 
        records.push({ 
         clientId: null, 
         id: data[idProperty], 
         data: data, 
         node: data 
        }); 
       } 

       result.setSuccess(true); 
       result.setTotal(count); 
       result.setCount(count); 

       if (typeof callback == 'function') { 
        callback.call(scope || me, result); 
       } 
      }, 

      function(transaction, errors) { 
       result.setSuccess(false); 
       result.setTotal(0); 
       result.setCount(0); 

       if (typeof callback == 'function') { 
        callback.call(scope || me, result); 
       } 
      } 
     ); 
    } 
}); 
+3

我認爲var之後的所有「額外」逗號是個好主意。這只是一個聲明/初始化列表。與「var test = 1,tester = 2,other = 3;」等類似的東西沒有什麼不同當你添加分號時,你可以在全局範圍內聲明所有其他變量,這可能是不好的。雖然在define塊關閉之前的最後一個逗號肯定是一個問題。那裏好抓。 –

+0

@StephenTremaine你是絕對正確的。不知道爲什麼我以另一種方式思考。 – benka

相關問題