无法在javascript中覆盖用rhaboo保存的对象

时间:2016-09-26 11:40:40

标签: javascript jquery local-storage

我正在尝试用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('');
});
}

1 个答案:

答案 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.没有这个限制,就不需要写了,它可能是万无一失的。