我有这个代码,我已经从谷歌找到了。它是用于保存数据的agility.js restful模型的适配器。现在,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();
};发布于 2012-03-29 13:40:00
我找到了一个解决方案,它是在函数如何检测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();
};https://stackoverflow.com/questions/9926094
复制相似问题