2016-04-15 101 views
2

试图完成书架的最简单示例,但无法在fetch语句中使用“withRelated”过去一对多关系。这里是我的代码(有一些东西隐私删除)代表一个一对多从B到ABookshelf JS:“this.hasOne”不是函数

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

然而,运行此我得到“未处理的拒绝类型错误:this.hasOne不是一个函数” ,引用this.hasOne在A中。如果我删除“withRelated”子句,它就像预期的那样运行并返回数据库中正确的条目。

为什么我收到此错误?更多信息: 的NodeJS:v4.4.1 书架:v0.9.4

回答

5

您正在使用的从它的父上下文继承this箭头功能。您需要使用function() {}语法,以便书架可以正确绑定this

+0

非常感谢! – nobillygreen

+0

我有同样的问题,并使用ES5函数(){}修复它。 – fraxture

0

速记函数表示法更短,并绑定到该类的上下文。

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