2016-01-23 2 views
0

Этот файл определяет сохранить/найти способы Document объекта и экспортирует его:Как делиться методами между различными объектами JavaScript/Parse?

магазин/document.js

import Parse from 'parse' 
import _ from 'lodash' 

Parse.initialize('APP_ID', 'CLIENT_ID') 

const Document = {} 
const ParseDocument = Parse.Object.extend('Document') 

Document.save = (json) => { 
    const document = new ParseDocument() 
    return document.save(json) 
} 

Document.find =() => { 
    const query = new Parse.Query(ParseDocument) 
    return query.find().then((results) => 
    _.map(results, (result) => 
     result.toJSON() 
    ) 
) 
} 

export default Document 

Этот файл использует экспортируемые методы:

просмотров/documents.js

submit() { 
    const document = { 
    title: this.title, 
    content: this.content 
    } 
    Document.save(document).then(() => 
    Document.find().then((result) => /* DO STUFF */) 
) 
} 

Это нормально, если у меня есть только один объект. Проблема в том, что у меня их много. Например, у меня также есть объект Section.

Если я следовать этому образцу, я должен был бы сделать это:

магазин/section.js

import Parse from 'parse' 
import _ from 'lodash' 

Parse.initialize('APP_ID', 'CLIENT_ID') 

const Section = {} 

... 

Section.save = (json) => { 
    const section = new ParseSection() 
    return section.save(json) 
} 

Как я могу это сделать, так что я только должен написать методы save и find один раз и использовать их, например, вот так: Document.save и Section.save?

ответ

1

Один из способов создать объект фасад для каждого объекта (подкласс Parse.Object):

магазин/document.js

'use strict' 

const ParseFacade = require('./parse-facade') 

const Document = new ParseFacade('Document') 

module.exports = Document 

магазин/section.js

'use strict' 

const ParseFacade = require('./parse-facade') 

const Section = new ParseFacade('Section') 

module.exports = Section 

parse-facade.js

'use strict' 

const Parse = require('parse') 
const _ = require('lodash') 

Parse.initialize('APP_ID', 'CLIENT_ID') 

function ParseFacade (className) { 
    this.ParseObject = Parse.Object.extend(className) 
} 

ParseFacade.prototype.save = function save (json) { 
    const PO = this.ParseObject 
    const document = new PO() 
    return document.save(json) 
} 

ParseFacade.prototype.find = function find() { 
    const PO = this.ParseObject 
    const query = new Parse.Query(PO) 
    return query.find().then((results) => 
     _.map(results, (result) => result.toJSON())) 
} 

module.exports = ParseFacade 

Для добавления функциональности к данному объекту, добавить свойство, как обычно:

Document.doSomething = function doSomething (...args) { 
    // this.ParseObject refers to the subclassed Parse.Object 
    // ... 
} 
Смежные вопросы