1

我有一个 LokiJS 提供的存储,我用它来使用autoloadCallback.

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.adsto content,但是updateAds()本质上做同样事情的函数,只是不接受参数并将它们硬编码,会state.ads相应地改变。

我编写通用函数来更新数组的方法的根本问题是什么?有没有办法做到这一点?


这是此行为的JSFiddle MCVE 示例

4

1 回答 1

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)
}

突变是接受状态作为第一个参数,以及包含参数作为第二个参数的对象参数的函数。应该使用 store 的方法提交突变。commit

这是你的小提琴更新

于 2018-01-04T15:48:45.253 回答