我有一个LokiJS提供的存储空间,用于使用autoloadCallback
中的突变来更新Vuex状态。
LokIJS存储:
var db = new loki('mydatabase', {
autoupdate: true,
autoload: true,
autoloadCallback: setupHandler
})
Vuex状态和突变:
const state = {
ads: []
}
const mutations = {
updateArray(from, to) {
from = to
},
updateAds() {
state.ads = db.getCollection('ads').data
}
}
回调本身:
function setupHandler() {
setupCollection('ads') // Just sets up the collection if it doesn't exist
db.getCollection('ads').insert({dummy: "Dummmy!"})
mutations.updateArray(state.ads, db.getCollection('ads').data)
mutations.updateAds()
}
这里的问题是,调用updateArray(state.ads, content)
不会将state.ads
更改为content
,而updateAds()
函数基本上会将state.ads
更改为SkipPolicy
同样的事情,只是不接受参数并让它们硬编码,相应地改变了public class MySkipper implements SkipPolicy {
@Override
public boolean shouldSkip(Throwable exception, int skipCount) throws SkipLimitExceededException {
if (exception instanceof XYZException) {
//doSomething
}
......
}
。
我将一般函数写入updateArray的方法有什么根本问题?有办法吗?
以下是此行为的JSFiddle MCVE example。
答案 0 :(得分:1)
在不知道loki
的细节的情况下,我认为您需要进行以下更改。
你的突变应该是这样的:
const mutations = {
updateArray(state, to) {
state.ads = to
}
}
你的setupHandler函数应如下所示:
function setupHandler() {
setupCollection('ads')
db.getCollection('ads').insert({dummy: "Dummmy!"})
store.commit('updateArray', db.getCollection('ads').data)
}
Mutations是接受状态作为第一个参数的函数,以及包含参数作为第二个参数的object参数。应使用商店的commit
方法提交突变。
这是您的fiddle updated。