TypeFramework Relationships



我一直在玩TypeScript MVC框架TypeFramework,我试图弄清楚如何在模型之间创建关系。我知道它用的是水线ORM。带有关系的水线模型的一个例子是:

// A user may have many pet
var User = Waterline.Collection.extend({
  attributes: {
    firstName: 'string',
    lastName: 'string',
    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
});
// A pet may only belong to a single user
var Pet = Waterline.Collection.extend({
  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',
    // Add a reference to User
    owner: {
      model: 'user'
    }
  }
});
一个TypeFramework模型的例子如下:
class User extends TF.Model{
    firstName: string,
    lastName: string
}

TF的代码。模型是:

class Model {
    public id: number;
    public createdAt: Date;
    public updatedAt: Date;
    static collectionName: string;
    static schema: boolean;
    static adapter: string;
    static attributes: any;
    private static collection;
    public save: <T>(callback: ISingleResultCallback<T>) => void;
    public destroy: <T>(callback: INoResultCallback<T>) => void;
    static save<T>(model: T, callback: ISingleResultCallback<T>): void;
    static destroy<T>(model: T, callback: INoResultCallback<T>): void;
    static all<T>(): DbQueryEnd<T>;
    static where(query: {}): WL.IQuery;
    static get(id: number): DbQueryUnique<any>;
    static first<T>(query: {}): DbQueryUnique<T>;
    static find<T>(): DbQuery<T>;
    static query<T>(query: string): DbQueryRaw<T>;
    static validate(attr: string, options: ModelValidation): any;
    static validate(attrs: string[], definition: ModelValidation): any;
    private static extend(from, to);
}

我不确定如何将关系集成到强类型的TypeFramework模型中。如有任何建议或帮助,不胜感激。

所以,让我在不了解这两个框架的所有内部工作原理的情况下开始。但是,我想我知道如何在这里得到你想要的。

首先,如果你可以让你的模型在Typescript中,而你的水线代码在Javascript中,这将使这更容易。

然而,如果你想在Typescript中使用Waterline,你可能需要创建。d。ts文件。不幸的是,我目前在DefinitelyTyped上没有看到任何可用的内容。这并不是特别容易,但只要你有足够的意志力,你可能就会明白这个概念,并使它发挥作用。官方指南很好。

说了这么多,就开始写代码吧!

你需要用你需要的所有东西实例化你的类。如果不将内容放入类属性中,就很有可能错过它们。你需要用super()调用基对象的构造函数;。

class User extends Model
{
    firstName: string;
    lastName: string;
    pets: IPet[];
    constructor(firstname: string, lastname: string, pets: IPet[])
    {
        super();
        this.firstName = firstname;
        this.lastName = lastname;
        this.pets = pets;
    }
}
interface IPet
{
    breed: string;
    petType: string;
    name: string;
}

您可能想让Pet和实际类,但目前,我们假设它不是。

那么,所有你应该做的是创建一个水线用户,你上面描述的方式是这样的:

var User = Waterline.Collection.extend(
    new User("Jim", "Bob", [{"breed": "tabby", "petType": "small", "name": "Mittens"}])
);

您可能有一个静态方法,可以获得"预构建"类型的用户,或通过ID提取一个。

static GetJimAndPets() : User
{
    return new User("Jim", "Bob", [{"breed": "tabby", "petType": "small", "name": "Mittens"}])
}
static GetUserById(id: number) : User
{
    //Logic here
    return null;
}

那么你可以更容易地调用你的方法:

var User = Waterline.Collection.extend(User.GetJimAndPets());

这应该可以工作,但正如我之前提到的,我不知道如何测试它和YMMV。

相关内容

  • 没有找到相关文章

最新更新