Worklight 6.1 - 适配器调用中的requireJS

时间:2014-02-26 12:07:10

标签: requirejs ibm-mobilefirst worklight-adapters

我想将我的数据检索与RequireJS的本地存储同步分开。 为此,我有一个模块从适配器获取数据并将其存储到window.myData对象。 然后我传递另一个模块,在loadSuccess完成后运行从window.myData到localStorage的同步。

当我调用AdapterService.retrieveRoomsFromServer(“john”,“doe”)时,对worklight的调用已经完成,但是有一个javascript错误:

TypeError: Cannot call method 'checkEndSynchro' of undefined

undefined似乎是RequireJS define()的函数参数中的SynchronizeLocalStorage传递。

我的AdapterService.js:

define([ 
    "jquery", 
    "synchronizeLocalStorage"
], function( $, SynchronizeLocalStorage) {

return {

    retrieveRoomsFromServer: function(username, password) {
        this._invokeProcedureGetListRooms(username, password);
    },

    _invokeProcedureGetListRooms: function(user, password) {
        var invocationData = {
                adapter : 'MyHTTPAdapter',
                procedure : 'getListRooms',
                parameters : [user, password]
        };
        var options = {
            onSuccess : this._loadSuccess,
            onFailure : this._loadFailure,
            invocationContext: this
        };
        WL.Client.invokeProcedure(invocationData, options);
    },

    _loadSuccess: function(result) {
        var items = result.invocationResult.array;
        var self = result.invocationContext;
        WL.Logger.debug('loading users rooms');
        for (var i = 0; i < items.length; i++) {
            var id = items[i].id;
            var name = items[i].name;
            var room = {'id':id, 'name':name};
            window.myData.myRooms.push(room);
        }
        window.flags.myRoomsLoaded = true;
        SynchronizeLocalStorage.checkEndSynchro();
    },

        _loadFailure: function(result) {}
       };
});

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您在适配器中如何使用requireJS?您不能在适配器中包含外部库。 RequireJS适用于模块化加载...但适配器不是这种情况,因为可能只有1个XML文件和1个.js文件。

部署适配器后,它就变成了Java对象,这意味着它无法使用外部资源,因此在此上下文中使用requireJS没有任何意义。