如何从Ember数据中的String名称解析模型类?

时间:2013-04-11 15:36:33

标签: model ember.js ember-data

我正在尝试使用ember-data,我需要能够动态解析给定String的模型名称。

我查看了ember-data代码库,但在那里找不到任何东西。然后我在ember中发现了这个:

/**
  @private

  This function defines the default lookup rules for container lookups:

  * templates are looked up on `Ember.TEMPLATES`
  * other names are looked up on the application after classifying the name.
    For example, `controller:post` looks up `App.PostController` by default.
  * if the default lookup fails, look for registered classes on the container

  This allows the application to register default injections in the container
  that could be overridden by the normal naming convention.

  @param {Ember.Namespace} namespace the namespace to look for classes
  @return {any} the resolved value for a given lookup
*/
function resolverFor(namespace) {

  resolve: function(fullName) {
    return this.resolver(fullName) || this.registry.get(fullName);
  },

  normalize: function(fullName) {
    return fullName;
  },

  lookup: function(fullName, options) {

我会假设ember-data挂钩到这个功能,所以我可以这样做:

App.resolver.resolveModel "model:#{modelName}"

但唉,不......

也许这是要走的路? (来自store.js行~1500)

  typeMapFor: function(type) {
    var typeMaps = get(this, 'typeMaps');
    var guidForType = Ember.guidFor(type);

    var typeMap = typeMaps[guidForType];

    if (typeMap) {
      return typeMap;
    } else {
      return (typeMaps[guidForType] =
        {
          idToCid: {},
          clientIds: [],
          recordArrays: []
      });
    }
  },

看起来商店内部有某种typeMaps?

1 个答案:

答案 0 :(得分:0)

如果您声明了模型,序列化程序知道如何执行此操作。见DS.Serializer typeFromAlias

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/serializer.js#L1103

你来自哪里?