我正在尝试用javascript中的rhaboo保存对象。初始化后它第一次工作,但是当我试图再次保存它时,它给了我
rhaboo.min.js:1 Uncaught TypeError: Cannot read property 'refs' of undefined
错误。我将错误固定在用keyArray
notes.write('presentationNotes', keyArray);
的行
我如何详细了解错误:
我使用干净的localStorage打开我的web应用程序(没有保存任何内容)并且rhaboo被初始化。之后,我导航到文档并使用notes-div
打开notes-button
。我在notes-area
中写了一些内容,点击notes-submit
按钮将rhaboo的注释保存到localStorage。我对第二份文件也这样做。现在一切正常。这两个笔记都得到了正确保存,因此我有一个这样的对象:
keyArray = {activeDoc1: ['note1', 'note2'], activeDoc2: ['note1', 'note2']}
保存在notes.presentationNotes
的rhaboo中。然后我重新加载我的webapplication并且rhaboo已经初始化了。我像以前一样导航到文档,检查是否可以加载保存的笔记。这可以按预期工作,但当我再次尝试按notes-submit
按钮时,它会给我上述错误。我做错了什么?
var notes = Rhaboo.persistent('Presentation Notes');
$(document).ready(function(event) {
var keyArray, activeDoc;
if (!notes.initialised) {
notes.write('initialised', true);
notes.write('presentationNotes', {});
console.log('Rhaboo Initialised');
keyArray = {};
} else {
console.log('Rhaboo already initialised');
keyArray = notes.presentationNotes;
console.log('notes.presentationNotes onLoad = ');
console.log(notes.presentationNotes);
}
//Notes open
$(document).on('click', '#notes-button', function() {
$('.notes-div').show();
activeDoc = $('.node.active').attr('id');
if (notes.presentationNotes[activeDoc] != null) {
//Iterate notes
$.each(notes.presentationNotes[activeDoc], function(index, value) {
$('#notes-area').append(value + '\n');
});
}
});
//Notes save
$(document).on('click', '#notes-submit', function() {
$('.notes-div').hide();
var str = $('#notes-area').val();
var array = str.split("\n");
keyArray[activeDoc] = array;
//Save notes
notes.write('presentationNotes', keyArray);
//Clear textarea
$('#notes-area').val('');
});
}
答案 0 :(得分:0)
如果没有HTML我无法尝试这个,所以我只是在这里猜测,但我怀疑如果你停止使用keyArray和activeDoc,你的问题就会消失。 rhaboo的重点在于它不是存储数据的地方。它是您的数据。
我看到您的程序中没有瞬态数据,即当用户离开并返回时,您没有主动删除的数据。所有数据都应该是持久的,因此它应该都在Rhaboo.persistent下。
这是哲学,但更具体地说,我认为你的问题在这里:
keyArray[activeDoc] = array;
当我想知道keyArray是什么时发现:
keyArray = notes.presentationNotes;
所以早期的一行实际上说:
notes.presentationNotes[activeDoc] = array;
但它在锡上说应该是:
notes.presentationNotes.write(activeDoc, array);
结果是,使得rhaboo工作的钩子没有被插入到数组中,就像notes.presentationNotes.write那样。
当你接下来说:
notes.write('presentationNotes', keyArray);
意思是:
notes.write('presentationNotes', notes.presentationNotes).
这显然不是你的意思。 Rhaboo并不怀疑该数组还没有钩子,因为它可以看到notes.presentationNotes确实有钩子。
我有时也会忘记使用write,而且无论你是什么,JS都无法在对象X中创建一个 NEW 键,这真的让我感到困惑。完成X.没有这个限制,就不需要写了,它可能是万无一失的。