Ember.js 如何获取余烬数据模型的存储名称
如何确定给定ED模型的“存储名称”(不确定正确的术语是什么)?假设我有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
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
。这肯定是更好的答案。