无法替换JSONStore集合中的文档

时间:2016-11-24 16:30:35

标签: javascript cordova ibm-mobilefirst jsonstore

我正在开发一个使用JSONStore和AngularJS的Cordova应用程序(使用MobileFirst Foundation 8.0)。

以下功能更新已存储在本地馆藏'议程'。

的文件。
update : function(element){

var defer = $.Deferred();

// set query for get document stored in local collection
var query = {id: element.id};

// search for exact value
var options = {
    exact: true,
    limit: 1
};

var collection = WL.JSONStore.get('agenda');

// invoke search function
collection.find(query, options)//WL.JSONStore.get('agenda').find(query, options)
.then(function (results) {
    // handle success - results (array of documents found)

    var rowstatus = results[0].json.rowstatus || '';

    // substitute current saved document with the update document
    results[0].json = element;

    // set value of rowstatus flag
    results[0].json.rowstatus = rowstatus===''?'UPD':rowstatus;

    var arrayMod = [];
    arrayMod.push(results[0]);

    //invoke replace procedure for update document in local collection
    collection.replace(arrayMod, {markDirty: false })//WL.JSONStore.get('agenda').replace(item, {markDirty: false})
        .then(function(docsRefreshed){

            console.log("docsRefreshed", docsRefreshed);

            defer.resolve();
        })
        .fail(function(refreshErr){

            defer.reject(refreshErr);
        });

})
.fail(function (findError) {

    defer.reject(findError);
});

return defer.promise();

}

步骤如下:

  1. 按元素ID查找本地集合中的文档 - IT工作

  2. 通过替换包含在' json'中的对象来更新文档的内容。 property:id没有改变,我验证了它 - IT WORKS

  3. 替换集合中的文档 - IT FAILS

  4. 返回的错误不是失败处理程序的标准错误拦截,它是以下内容:

      

    VM404 worklight.js:5139未捕获异常:未捕获RangeError:超出(compiled_code)的最大调用堆栈大小:57__log @ VM404 worklight.js:5139PUBLIC_API。(匿名函数)@ VM404 worklight.js:5539WL.Logger.window。 onerror @ VM404 worklight.js:5497   VM404 worklight.js:57 Uncaught RangeError:超出最大调用堆栈大小(...)它@ VM404 worklight.js:57__handleJsonObj @ VM416 jsonstore.js:1951__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore。 js:1947__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js :1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js: 1942__handleJsonObj @ VM416 jsonstore.js:1947__handleJsonObj @ VM416 jsonstore.js:1942__handleJsonObj ....

    enter image description here

1 个答案:

答案 0 :(得分:0)

来自@ encrico.visentini的评论:

  

我解决了这个问题。该错误是由使用的插件自动添加的属性引起的,该插件导致json对象的循环引用。删除此属性我可以替换所有' json'对象