Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.
Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.
В общем, нет пути (в браузере), поэтому сериализуйте объекты с прикрепленными к ним функциями, поскольку каждая функция имеет ссылку на внешнюю область. Если функция ссылается на любую из этих переменных, они больше не будут существовать при десериализации.
Что бы я хотел использовать встроенные (или json2.js) JSON.stringify
и JSON.parse
функции с параметрами replacer
и reviver
. Вот частичный пример того, как он будет работать:
JSON.stringify(yourObject, function(name, value) {
if (value instanceof LatLng) { // Could also check the name if you want
return 'LatLng(' + value.lat() + ',' + value.lng() + ')';
}
else if (...) {
// Some other type that needs custom serialization
}
else {
return value;
}
});
JSON.parse(jsonString, function(name, value) {
if (/^LatLng\(/.test(value)) { // Checking the name would be safer
var match = /LatLng\(([^,]+),([^,]+)\)/.exec(value);
return new LatLng(match[1], match[2]);
}
else if (...) {
...
}
else {
return value;
}
});
Вы можете использовать любой формат сериализации, который вы хотите, в своих пользовательских типах. Формат LatLng (широта, долгота) - это всего лишь один из способов сделать это. Вы даже можете вернуть объект javascript, который может быть сериализован в JSON изначально.
использовать gserializer :
http://www.onegeek.com.au/articles/programming/javascript-serialization.php
код в google:
http://code.google.com/p/gserializer/
GSerializer является javascript-библиотеку для сериализации / десериализации javascript-объектов в строки и из строк, для сохранения, например, в Cookie. В отличие от многих других реализаций, GSerializer может также сериализовать функции и нотацию без JSON.
blockquote>
Я бы не стал сериализовать функции JS из соображений безопасности. Через открытый API всевозможные неприятные вещи могут быть отправлены в базу данных. Что касается десериализации, у меня другой подход. Я смешиваю объекты модели, определенные на стороне клиента, с данными, поступающими от JSON. У меня есть небольшой инструмент для этого, посмотрите на GitHub в khayll / jsonmix .
JsonMix предоставляет своего рода десериализацию от JSON в JavaScript Object complete с функциями.
blockquote>Это будет выглядеть как-то:
//model definition (just an example) var LatLng = function() {} LatLng.prototype.getMapTypeId = function() { return this.mapTypeId; } //deserializing done like this var result = JSMix(jsonString).withObject(LatLng.prototype, "latLngs").build(); //all items in the latLngs collection have the functions coming from the model console.log(result.latLngs[5].getMapTypeId());
Вы не хотите сериализовать логику, такую как функции.
Если вам нужно обновить свои функции логики / js в будущем, вы не всегда хотите всегда загружать старую логику назад с данными необходимо. Осторожно.