Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何获取余烬数据模型的存储名称_Ember.js_Ember Data - Fatal编程技术网

Ember.js 如何获取余烬数据模型的存储名称

Ember.js 如何获取余烬数据模型的存储名称,ember.js,ember-data,Ember.js,Ember Data,如何确定给定ED模型的“存储名称”(不确定正确的术语是什么)?假设我有App.Payment,是否有让我查找其对应名称的存储方法,即Payment(例如用于find查询) 您可能正在寻找Ember的字符串dasherize方法: var fullClassName = "App.SomeKindOfPayment"; var className = fullClassName.replace(/.*\./, ""); // => "SomeKindOfPayment" var dasher

如何确定给定ED模型的“存储名称”(不确定正确的术语是什么)?假设我有
App.Payment
,是否有让我查找其对应名称的存储方法,即
Payment
(例如用于
find
查询)

您可能正在寻找Ember的字符串dasherize方法:

var fullClassName = "App.SomeKindOfPayment";
var className = fullClassName.replace(/.*\./, ""); // => "SomeKindOfPayment"
var dasherizedName = Ember.String.dasherize(className); // "some-kind-of-payment"
在Ember中可能有一种内置的方法来实现这一点,但我花了一段时间寻找之后还没有找到它


编辑:当需要模型名时,余烬数据还可以让您通过传递“App.SomeKindOfPayment”而不受惩罚-它通常检查模型名的格式并自行将其更新为所需格式。

store.find
store.createRecord
,以及其他持久化方法,请使用
store.modelFor('myModel'))
。经过一些设置后,它调用
container.lookupFactory('model:'+key)其中键是“myModel”。因此,任何有效的工厂查找语法都是适用的。例如:


给定一个名为
OrderItems
的模型,您可以使用:
order.items
order\u items
OrderItems
OrderItems

,结果证明根本不需要这样做,原因如下:

为了调用
store.findAll(“payment”)
,我尝试使用模型的字符串表示(
payment
)来调用
App.payment
)。但是,查看,
findQuery
函数调用
modelFor
,从字符串(
Payment
)中查找工厂(
App.Payment
),除非已经提供工厂。通过调用
this.get('model')。键入
,可以从控制器轻松访问工厂。无需将其转换为字符串(并返回)

以下是来自Ember数据源的相关代码

modelFor: function(key) {
    var factory;

    if (typeof key === 'string') {
      factory = this.container.lookupFactory('model:' + key);
      Ember.assert("No model was found for '" + key + "'", factory);
      factory.typeKey = key;
    } else {
      // A factory already supplied.
      factory = key;
    }

    factory.store = this;
    return factory;
  },

对于余烬数据1.0(及更高版本)

modelName
是一个破折号化的字符串。它存储为类属性,因此如果您有模型的实例:

var model = SuperUser.create();
console.log(model.constructor.modelName); // 'super-user'
var model = App.Name.create({});
console.log(model.constructor.typeKey); // 'name'

对于1.0之前的余烬数据

typeKey
是模型的字符串名称。它存储为模型的类属性,因此如果您有模型的实例:

var model = SuperUser.create();
console.log(model.constructor.modelName); // 'super-user'
var model = App.Name.create({});
console.log(model.constructor.typeKey); // 'name'

您可以从您所在的每个控制器/路由器呼叫商店。因此,它不一定附加到路由或功能。要获取与您的店铺名称相关的当前路线,请查看此处:这实际上并没有回答您提出的问题(与其他答案不同),尽管信息是相关的。此处
model.get(“type”)。可以使用typeKey
。这肯定是更好的答案。