我到底如何在组件内部的商店中获得控制权?我正在尝试创建一个自动完成的组件,该组件从商店返回结果。
App.AutoCompleteComponent = Ember.Component.extend({
//-------------------------------------------
// Ember Properites
//-------------------------------------------
content: Ember.ArrayController.create(),
//-------------------------------------------
// Instance Properties
//-------------------------------------------
queryText: "",
componentItemSelected: null,
//-------------------------------------------
// Observers
//-------------------------------------------
queryTextChanged: function () {
this.updateContent(this.get("queryText"));
}.observes("queryText"),
//-------------------------------------------
// Instance Methods
//-------------------------------------------
selectItem: function (item) {
this.set("componentItemSelected", item);
},
updateContent: function (queryText) {
if (queryText.length <= 5) {
console.log('not greater than 5 chars');
return;
}
this.get("content").setObjects([]);
var items = App.Company.find();
this.get("content").setObjects(items);
}
});
这是我的公司模式
App.Company = DS.Model.extend({
name: DS.attr('string'),
created_at: DS.attr('date'),
updated_at: DS.attr('date'),
people: DS.hasMany('person')
});
我试过了:
this.get('store')
DS.Store.find('company')
store
App.Company.find()
我总是得到一个 Uncaught TypeError ... has no method 'find'
真正的答案是你不应该。组件应该与外界无关,而对商店的依赖打破了这个概念。确实,您应该事先获取模型(在路由或控制器中,具体取决于逻辑)并将其传递到组件中。
https://github.com/emberjs/data/blob/master/TRANSITION.md
通常,直接在组件中查找模型是一种反模式,您应该更喜欢在包含组件的模板中传入所需的任何模型。
现在,我已经说了,将商店传递到组件中。它位于路由和控制器上,因此当您创建一个作为参数之一在商店中发送的组件时,您可以使用this.get('store')
{{auto-complete store=controller.store}}
要么
{{auto-complete store=store}}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句