【发布时间】:2015-04-10 17:06:36
【问题描述】:
我也有想要提供数据的组件。如果有帮助,我正在使用 Ember-CLI。
该组件是一个地图,我正在加载到我不想在其上放置标记的页面上。我使用了一个组件,因此我可以使用 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,我想知道它是否与模块内部 this 的上下文有关?
如果我不知道该怎么做,请告诉他们!
更新:为上下文添加路由、控制器和模板。
路线
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')之类的操作,它将返回未定义。我该如何处理? -
首先您可以使用 ember inspector 来确认您的控制器可以按预期访问存储并且存储包含您期望的数据吗?
-
@Oren 我不能 100% 确定如何检查,我可以在数据选项卡中看到数据。我拥有的控制器是
ApplicationController,如果我选择查看树并且在该控制器的模型部分中有一个<DS.RecordArray....>,右侧栏有一个Ember.ArrayProxy,其中有我的项目。这似乎不太正确......这有帮助吗?非常感谢。 -
我需要查看您的路由和控制器中的代码以便更好地提供建议,但至少您正在提取数据:)
标签: ember.js ember-data ember-cli