В Meteor, когда вы извлекаете запись из базы данных, это только запись. Поэтому, если у меня есть коллекция под названием Dogs
, dog
может иметь fur: 'brown'
или breath: 'stinky'
, но у нее нет метода bark()
.
Очевидно, я мог бы создать некоторые функции, ожидающие a dog
в качестве аргумента, а затем выполнить операции над этим dog
. Я мог бы даже инкапсулировать все эти функции в один конструктор. Я не сумасшедший об этом подходе, но если кто-то получил чистый и разумный способ сделать это, я все уши.
Еще одна мысль о том, что я должен был обернуть dog
в Backbone.Model
. Это может быть интересно, так как fetch
и save
могут быть переопределены для выполнения find
и insert
или update
, и вы также можете определить все свое поведение там, но я прочитал, что этот тип вещь обычно обескуражена.
Есть ли правильный способ сделать это? Есть ли Meteor.Model
официально в работах? Как другие решают эту проблему?
Edit
Для тех, кто подходит к этому вопросу через год после принятого ответа: во время этого редактирования я использую Exygy minimongoid mrt package, который имеет некоторые улучшения haihappen version, которые упоминаются в сообщении в блоге, связанном с принятым ответом.
В настоящее время я вношу вклад в репозиторий, чтобы сделать результат более похожим на отношение. Надеемся, что другие получат от этого выгоду и почувствуют склонность вносить полезные функции.
Edit
Другой ответ предложил использовать свойство transform
при создании коллекции. Хотя я определенно предпочитаю то, что мне действительно не нужно строить самостоятельно, эта функция добавляет много возможностей, и я надеюсь, что любые команды, которые работают над ORM для Meteor, воспользуются этим в своей основе.
Здесь сообщение в блоге, в котором объясняется, как использовать свойство transform
.
Кроме того, minimongoid теперь доступен как пакет Meteor, и я все еще использую его. Он поддерживает проверку и декларирование отношений. Я добавил некоторые функциональные возможности для этого пакета, поэтому, если на плате много элементов, board.pieces().create(attributes)
будет сохранять новую запись piece
с данным attributes
и будет автоматически ассоциироваться с board
. Из различных решений, которые я видел, это кажется наиболее полным.