2016-04-15 5 views
2

Der Versuch, durch die einfachsten Beispiele von Bücherregal zu arbeiten, aber nicht über eine Eins-zu-viele-Beziehung mit "withRelated" in einer Fetch-Anweisung. Hier ist mein Code (mit einigen Dingen für die Privatsphäre entfernt) eine Eins-zu-viele von B nach A. darstelltBookshelf JS: "this.hasOne" ist keine Funktion

"use strict"; 
var knex = require('knex') ({ 
    client: 'mysql', 
    connection: { 
     host: '127.0.0.1', 
     user: '*******', 
     password: '*******', 
     database: '*******', 
     charset: 'utf8' 
    } 
}); 

var bookshelf = require('bookshelf')(knex); 

var A, B 

A = bookshelf.Model.extend({ 
    tableName: 'A', 
    propB:() => { 
     return this.hasOne(B, 'A_id') 
    } 

B = bookshelf.Model.extend({ 
    tableName: 'B', 
    propA:() => { return this.belongsTo(A, 'A_id') } 
}) 

A.forge().fetch({withRelated: ['propB']}).then(function(x){console.log(x)}) 

Allerdings läuft diese erhalte ich „Unbehandelte Ablehnung Typeerror: this.hasOne ist keine Funktion“ Bezug nehmend auf this.hasOne in A. Wenn ich die "withRelated" -Klausel entferne, läuft sie genauso wie erwartet und gibt den korrekten Eintrag in der Datenbank zurück.

Warum erhalte ich diesen Fehler? Weitere Informationen: NodeJS: v4.4.1 Bücherregal: v0.9.4

Antwort

5

Sie sind mit Pfeilfunktionen, die this von seinem übergeordneten Kontext erben. Sie müssen function() {} Syntax verwenden, damit das Bücherregal this korrekt binden kann.

+0

Vielen Dank! – nobillygreen

+0

Ich hatte das gleiche Problem und mit der ES5-Funktion() {} behoben. – fraxture

0

Shorthand-Funktionsnotation ist kürzer und bindet an den this-Kontext der Klasse.

var A = bookshelf.Model.extend({ 
    tableName: 'A', 
    propB() { 
     return this.hasOne(B, 'A_id') 
    } 
})