2012-03-29 2 views
0

У меня есть этот код, который я нашел из Google. Это адаптер для гибкой модели agility.js для сохранения данных. Теперь УДАЛИТЬ функция работает отлично, кроме как на _params.id === 0, где было бы сказатьЛокальная функция хранения Agility.js

Uncaught TypeError: Cannot set property 'id' of undefined

Код

$$.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(); 
}; 

ответ

0

Я нашел решение, это в том, как функция обнаружения ошибки в линии if (!_params.id) которая также возвращение false для «0», поэтому правильный код

$$.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(); 
}; 
Смежные вопросы