【问题标题】:Define js-data resource in TypeScript在 TypeScript 中定义 js-data 资源
【发布时间】:2016-06-29 08:28:07
【问题描述】:

是否可以使用 TypeScript 类创建 js-data 资源定义?

总的来说,我希望对计算属性和实例方法定义提供完整的类型支持。

像这样的东西会很棒:

class SomeModel
{
    public someBusinessModelValue = 'foo';
    public someMoreValues = 'bar';

    public get someComputedProperty()
    {
        return this.someBusinessModelValue + someMoreValues;
    }

    public instanceMethod(param: string)
    {
        return this.someMoveValues.search(param);
    }
}

然后

DS.defineResource(fromClass('name', '/endpoint', 'idAttr', SomeModel));

或者更进一步,像这样定义它

class SomeModelStore extends SomeModel
{
    name = 'name';
    endpoint = 'endpoint';
    idAttribute = 'idAttr';
    relations = 
    {
        //[...]
    }
}

并像使用它

DS.defineResource(SomeModelStore);

请注意,这些只是我希望它看起来像的一些想法,我知道它可能不会完全像那样工作。

【问题讨论】:

  • 可以使用useClass 来做到这一点吗?

标签: javascript typescript jsdata


【解决方案1】:

JSData 2.x

答案是肯定的,有点。在 JSData 2.x 中创建资源定义不是很灵活,但是您可以提供一个构造函数(通过useClass 选项)以在记录实例化期间使用。

这是一个示例:http://plnkr.co/edit/vNCoC8?p=infouseClass 文档:http://www.js-data.io/docs/dsdefaults#useclass

JSData 3.x

在 JSData 3.x 中,您可以扩展各种类:

import { DataStore, Mapper, Record } from 'js-data';

class CustomMapper extends Mapper {
  // ...
}

const store = new DataStore({
  mapperClass: CustomMapper
});

class BaseCustomRecord extends Record {
  // ...  
}

store.defineMapper('user', {
  recordClass: class UserRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('post', {
  recordClass: class PostRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('comment', {
  recordClass: class CommentRecord extends BaseCustomRecord { /*...*/ }
});

// etc. etc.

这里有一些显示使用 JSData 3.x 扩展一些类的 plunker:

API 文档是扩展类时的便利资源:http://api.js-data.io/js-data/latest/index.html

【讨论】:

  • 有什么方法可以为单个商店中的每个映射器设置一个自定义类?
  • 这是否也适用于模式验证? js-data.io/v3.0/docs/validation 提到扩展 Schema 类,但尚未记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多