Web sql/Sql Lite и привязка к строке в Angular

Это для углового приложения phonegap. Я бы подумал, что привязка к возврату запроса к БД, result.rows в моем случае была бы возможна, но похоже, что это не так. Единственный способ, которым я мог заставить это работать, - это закомментированный код, где я вручную вставляю данные в массив построчно. Это единственный способ?

Фактическая ошибка, полученная при привязке к .rows: Error: Duplicates in a repeater are not allowed. Repeater: item in items key: undefined:undefined

Обслуживание:

// only portion of code shown
query: function (q) {
        var d = $q.defer();
        var db = this.getDb();

        db.transaction(function (t) {
            t.executeSql(q, [], function (tx, results) {
                d.resolve(results);
            }, function (err) {
                d.reject(err);
            });

        }, function (err) {
            d.reject(err);
        }
        );

        return d.promise;
     }

Контроллер вот такой:

  Sql.query('select * from DEMO').then(function (data) {
                console.log(data);
                //$scope.items = [];

                //for (i = 0, l = data.rows.length; i < l; i++) {
                    //$scope.items.push(data.rows.item(i));
                //}

                $scope.items = data.rows;  // this errors out
                $scope.$safeApply();
            });

Повторитель прост:

<div ng-repeat='item in items'>{{item.id}} {{item.data}}</div>

person lucuma    schedule 06.06.2013    source источник


Ответы (1)


Судя по сообщению об ошибке, похоже, что у вас есть более одного элемента undefined в массиве data.rows.

Ваш рабочий код использует data.rows.item(i), это создает новый пустой объект вместо неопределенного? Попробуйте изменить data.rows.item(i) на data.rows[i] в вашем рабочем коде, это тоже сломается?

Предполагая, что вы используете angular 1.1.5, вот несколько вариантов:

  • Используйте текущий обходной путь
  • Откат до 1.1.4 или до текущей стабильной версии 1.0.7. Я думаю, что 1.1.4 будет работать на основе сломанной версии с 1.1.5 и < href="http://plnkr.co/edit/kixJdfBSpJK2hls7NOSZ?p=preview" rel="nofollow">рабочая версия с 1.1.4.
  • Удалите все повторяющиеся undefined строки из data.rows

Примечание. Для других, имеющих подобный тип ошибки, Angular генерирует $$hashKey для объектов при выполнении ng-repeat. Эта ошибка указывает на то, что тот же объект находится в массиве (с тем же $$hashKey) и не разрешен в версии 1.1.5 (и более поздних?).

См. этот сообщение в блоге. и запись группы Google для получения дополнительной информации. Также этот запрос на вытягивание выглядит связанным, поэтому я не уверен, что такое поведение предназначено в будущем, хотя, похоже, это было исправлено в прошлом.

person Gloopy    schedule 07.06.2013
comment
Запрос, который я запускаю, имеет только два столбца и две строки данных, идентификатор и данные, оба из которых имеют и отображают данные. Я понизлю версию и сообщу, если это исправит. - person lucuma; 08.06.2013
comment
У меня только что была возможность протестировать это, и у меня возникли аналогичные проблемы как с 1.1.4, так и с 1.1.5. Откат к 1.0.7 исправил это для всех, у кого были проблемы с хеш-ключом. - person lucuma; 20.06.2013