0

これは非常に奇妙な問題です。sencha touch 2 の sql プロキシを変更しました。実際には、いくつかの構成と名前を変更しただけで、一部の console.log を除いてコードは変更されていません。chromeでデバッグすると、createTableのコードが実行され、データベースが作成されましたが、create tableでexecuteSqlが機能しませんでした。既に成功と失敗のコールバックを追加しましたが、それらは実行されませんでした。

生のJavaScriptコードが正常に機能するため、奇妙です。後でコードを貼り付けますが、なぜそうなったのかほとんどイメージできません。

下手な英語でごめんなさい。

生のコードが機能する可能性があります:

var db = openDatabase("TDD", "1.0", "TDD Database", 5 * 1024 * 1024);
db.transaction(function(tx){
       tx.executeSql("CREATE TABLE IF NOT EXISTS Activities " +
                    "(id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, " +
                    "title TEXT, location TEXT)");
});

Sencha Touch SQL Proxy (必要なコードのみ):

/**
 * PhoneGap proxy.
 */
Ext.define('TDD.proxy.PhoneGap', {
    alias: 'proxy.phonegap',
    extend: 'Ext.data.proxy.Client',

    conf ig: {
        /**
         * @cfg {Object} reader
         * @hide
         */
        reader: null,
        /**
         * @cfg {Object} writer
         * @hide
         */
        writer: null,

        table: null,

        database: 'TDD',

        columns: '',

        uniqueIdStrategy: false,

        tableExists: false,

        defaultDateFormat: 'Y-m-d H:i:s.u'
    },

    create: function (operation, callback, scope) {
        var me = this,
            db = me.getDatabaseObject(),
            records = operation.getRecords(),
            tableExists = me.getTableExists();

        operation.setStarted();

        db.transaction(function(transaction) {
            if (!tableExists) {
                me.createTable(transaction);
            }

            me.insertRecords(records, transaction, function(resultSet, errors) {
                if (operation.process(operation.getAction(), resultSet) === false) {
                    me.fireEvent('exception', this, operation);
                }

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

    createTable: function (transaction) {
        var sql = 'CREATE TABLE IF NOT EXISTS ' + this.getTable() + ' (' + this.getSchemaString() + ')';
        console.log(sql);
        transaction.executeSql(sql, [],
            function(tx, results) {
                console.log("Success.");
                console.log(results);
            },
            function(tx, errors) {
                console.log("Fail.");
                console.log(errors);
            }
        );
        // Don't work either.
        transaction.executeSql("Create Table item (id integer, TT text)");

        this.setTableExists(true);
    },

    getDatabaseObject: function() {
        return openDatabase(this.getDatabase(), '1.0', 'TDD Database', 5 * 1024 * 1024);
    }
});
4

1 に答える 1

0

投稿されたコードはこれを示しています:

構成: {

そのはず:

構成: {

それがあなたの問題かどうかはわかりませんが、最初にそこを見てください。

于 2013-02-18T16:10:46.253 に答える