0

私はグーグルから見つけたこのコードを持っています。これは、データを保存するための agility.js レストフル モデル用のアダプターです。これで、DELETE 関数は_params.id === 0、それが言う場所を除いて完全に機能します

キャッチされていない TypeError: 未定義のプロパティ 'id' を設定できません

コード

$$.adapter.localStorage = function(_params) {
    var key = (this._data.persist.baseUrl || '') + this._data.persist.collection;
    var value = localStorage[key];
    var items = (value && value.length > 0 ? JSON.parse(value) : []);
    switch (_params.type) {
    case 'GET':
        if (_params.id) { // normal get
            if (items[_params.id]) {
                _params.success(items[_params.id]);
            } else {
                _params.error();
            }
        } else { // gather call
            console.log(items);
            items = $.map(items, function(item) {
                return item;
            });
            console.log(items);
            _params.success(items);
        }
        break;
    case 'DELETE':
        _params.data = undefined; // continue into POST case
    case 'PUT':
        // continue into POST case
    case 'POST':
        if (!_params.id) {
            _params.id = items.length;
            _params.data.id = _params.id;
        }
        items[_params.id] = _params.data;
        //_params.success({id:_params.id});
        localStorage[key] = JSON.stringify(items);
        break;
    }
    _params.complete();
};
4

1 に答える 1

0

私は解決策を見つけました。それは、関数if (!_params.id)が「0」に対してfalseを返す行でエラーを検出する方法にあるため、正しいコードは次のとおりです

$$.adapter.localStorage = function(_params) {
    var key = (this._data.persist.baseUrl || '') + this._data.persist.collection;
    var value = localStorage[key];
    var items = (value && value.length > 0 ? JSON.parse(value) : []);
    switch (_params.type) {
    case 'GET':
        if (_params.id) { // normal get
            if (items[_params.id]) {
                _params.success(items[_params.id]);
            } else {
                _params.error();
            }
        } else { // gather call
            console.log(items);
            items = $.map(items, function(item) {
                return item;
            });
            _params.success(items);
        }
        break;
    case 'DELETE':
        _params.data = undefined; // continue into POST case
    case 'PUT':
        // continue into POST case
    case 'POST':
        if (!_params.id && _params.id !== 0) {
            _params.id = items.length;
            _params.data.id = _params.id;
        }
        items[_params.id] = _params.data;
        //_params.success({id:_params.id});
        localStorage[key] = JSON.stringify(items);
        break;
    }
    _params.complete();
};
于 2012-03-29T13:40:00.907 に答える