Использовать doc как вычисляемое свойство (Vue, Nedb, Electron) - PullRequest
0 голосов
/ 28 марта 2019

Я установил nedb в мою настройку под управлением Vue и Electron, следуя этому руководству . Я не получаю ошибок при настройке базы данных, и кажется, что все работает с хранилищем.

У меня проблемы с отображением содержимого документа. Я, наверное, неправильно понимаю, как это сделать.

То, как я это сделал сейчас, заключается в том, что сначала у меня есть этот метод тестирования в Vue, который называется savePreset(). Он просто создает документ и вставляет его в базу данных со следующим кодом из файла readme из nedb:

savePreset(){
        var doc = { hello: 'world'
               , n: 5
               , today: new Date()
               , nedbIsAwesome: true
               , notthere: null
               , notToBeSaved: undefined  // Will not be saved
               , fruits: [ 'apple', 'orange', 'pear' ]
               , infos: { name: 'nedb' }
               };
          this.$db.insert(doc, function (err, newDoc) {   // Callback is optional
            // newDoc is the newly inserted document, including its _id
            // newDoc has no key called notToBeSaved since its value was undefined
            if (err) {
              console.log(err);
            } else {
              console.log(newDoc)
            }
          });
      }

newDoc регистрируется в консоли при вызове этого метода, поэтому вставка работает. Затем я пытаюсь вывести содержимое документа, чтобы в конце концов просмотреть его и создать один элемент для каждого элемента в документе. Я пытаюсь сделать это с вычисляемым свойством, как это:

getDB(){
        return this.$db.find({ hello: 'world' }, function (err, docs) {
          // docs is an array containing documents Mars, Earth, Jupiter
          // If no document is found, docs is equal to []
          return docs
        });
      }

Однако getDB - это undefined при этом. Когда я пытаюсь console.log(docs) в той же функции, он записывает в массив массив объектов, которые я добавил с помощью метода savePreset. Таким образом, кажется, что можно получить документ, зарегистрировав его в функции, но ничего не отображается на внешнем интерфейсе, когда я пытаюсь вывести свойство с помощью {{getDB}}.

Я подозреваю, что я должен сделать это по-другому. Есть идеи?

1 Ответ

0 голосов
/ 29 марта 2019

Нет необходимости в обещаниях или async / await.Вы можете просто установить локальное свойство данных в обратном вызове $db.insert (предварительно преобразовать его в функцию-стрелку для сохранения контекста):

// script
export default {
  data() {
    return {
      doc: null, ?
    }
  },
  methods: {
    savePreset() {
      ...
      this.$db.insert(doc, (err, newDoc) => {
        if (err) {
          console.log(err)
        } else {
          console.log(newDoc)

          this.doc = newDoc ?
        }
      })
    }
  }
}

//template
<ul>
  <li v-for="(val, key) in doc" v-if="val">{{key}}: {{val}}</li>
</ul>

Edit Iterating an object with v-for

...