IBM Worklight 6.0 - 将参数传递给JSONStore加载函数

时间:2013-11-22 18:51:12

标签: adapter ibm-mobilefirst jsonstore

我想基于提供的param将JSONStore加载到适配器映射的加载函数。 让我更好地解释一下。

JSONStore初始化是这样的:

collections[EMPLOYEE_COLLECTION_NAME] = {

    searchFields : {ENAME: 'string', EMPNO:'integer'},

    //-- Start optional adapter metadata
    adapter : {
        name: 'EmployeesDB',
        add: 'addEmployee',
        remove: 'deleteEmployee',
        replace: 'updateEmployee',
        load: {
            procedure: 'getEmployee',
            params: [region],
            key: 'resultSet'
        }
    }
    //-- End optional adapter metadata
};


//Initialize the people collection
WL.JSONStore.init(collections, options)

正如您在上面的代码中看到的那样,即使在将param区域传递给适配器集合init后,它是否应该在我的应用程序生命周期中发生变化,因此有时候区域让我们说是SOUTH,其他就是NORTH等等。

我意识到即使我在创建商店后更改了这个值,适配器getEmployee(见下文)中的映射加载函数总是得到jsonstore初始化时包含的区域的值,而不管我更改区域变量值稍后的。看起来适配器绑定conf在集合创建时获得,并且永远不会更改它

function getEmployee(data) {
    WL.Logger.info('Show param:'+data); 
    return WL.Server.invokeSQLStatement({
        preparedStatement : selectStatement,
        parameters : []
    });
}

有没有办法将参数传递给Jsonstore加载函数,该函数可以在初始化存储后更改?

我想避免关闭并再次初始化集合以节省时间和资源。

顺便说一句,我真正需要的是根据绑定到集合的适配器参数灵活处理从数据库加载的内容。

1 个答案:

答案 0 :(得分:4)

尝试类似:

WL.JSONStore.get(EMPLOYEE_COLLECTION_NAME).adapter.load.params = ['...']

在致电WL.JSONStore.get(EMPLOYEE_COLLECTION_NAME).load()之前。

如果您希望获得更大的灵活性,可以随时拨打WL.Client.invokeProcedure并在onSuccess回调内拨打:WL.JSONStore.get(EMPLOYEE_COLLECTION_NAME).add(['...'], {push: false})push: false部分将确保JSONStore了解所添加的数据是与后端数据保持同步的。这意味着当您致电时,它不会显示这些文件:WL.JSONStore.get(EMPLOYEE_COLLECTION_NAME).getPushRequired()WL.JSONStore.get(EMPLOYEE_COLLECTION_NAME).push()