2

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

我查看了 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: []
      });
    }
  },

看起来商店内部有某种类型映射?

4

1 回答 1

0

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

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

你从哪里来的字符串?

于 2013-04-20T17:33:51.200 回答