У меня есть компонент, который я также хочу предоставить. Я использую Ember-CLI, если это помогает.Ember: Доступ к хранилищу данных в компоненте Ember
Компонент - это карта, которую я загружаю на страницу, чтобы я не хотел размещать маркеры. Я использовал компонент, чтобы использовать способ didInsertElement
, чтобы получить доступ к элементу, когда он будет готов.
export default Ember.Component.extend({
componentMap: '',
didInsertElement: function() {
navigator.geolocation.getCurrentPosition(position => {
//Initialize map...
this.populateMap();
});
},
populateMap: function() {
//Get store
var store = this.get('parentView.targetObject.store');
console.log(store);
//Search Store
var data = store.find('restaurant');
//Where is the data?!
data.map(item => {
console.log(item.get('name'));
});
}
});
У меня возникли проблемы с получением данных из магазина. Я видел пару методов, here показывает два разных метода. Первый - this.get('parentView.targetObject.store')
или this.get('targetObject.store')
. Я также пробовал метод {{component store=store}}
, но это тоже не работало для меня. Это может быть связано с фундаментальным недостатком понимания потока данных в приложении ember.
Я использую Ember CLI, и мне интересно, имеет ли он какое-либо отношение к контексту внутри модулей?
Если я ухожу от базы относительно того, как я должен это делать, пожалуйста, дайте им знать!
UPDATE: добавление маршрута, контроллера и шаблона для контекста.
Маршрут
export default Ember.Route.extend({
model: function() {
return this.store.find('restaurant');
}
});
Контроллер
export default Ember.Controller.extend({
actions: {
add: function() {
var $addForm = $('.add-form');
$addForm.show();
}
}
});
шаблона (index.hbs, который выводится в application.hbs {{outlet}}
)
{{main-map store=store}}
Спасибо.
Правильный способ сделать это с помощью '{{component store = store}}', как вы упомянули. Компоненты не должны иметь доступ к хранилищу напрямую. Что вы пробовали, когда следовали этому подходу? –
@Oren Я использовал 'var data = this.get ('store'). Find ('restaurant', 1 ');' где ресторан - моя модель. Но если я тогда сделаю что-то вроде 'data.get ('name')', он вернется undefined. Как мне с этим справиться? – Rchristiani
Сначала вы можете использовать инспектор ember, чтобы подтвердить, что ваш контроллер имеет доступ к магазину, как ожидалось, и что в хранилище содержатся данные, которые вы ожидаете? –