在Ember.js中无法获取查找后的数据

时间:2014-05-22 19:54:28

标签: ember.js

我有一个Ember应用程序,用户输入商店编号。我有一个Express.js API连接到MongoDB。

我设置了"商店"我的控制器中的变量如此:

App.StoreNumberRoute = Ember.Route.extend({
  setupController: function(controller, model){
      store = this.store;
  }
});

在我的事件捕手中(我使用Bacon.js进行事件)我得到他们输入的数字并使用Ember语法找到模型:

var hwStore = store.find('hwStores', { number: value });

我需要确保他们输入的号码是有效的商店,然后弹出一个模式,向他们展示他们输入的商店号码的信息。

我可以通过Express.js的控制台消息验证是否正在调用正确的路由:

GET: http://localhost:3000/hwStores?number=1234

并且实际上正在返回正确的结果:

{ "hwStores": [
  {
    "city": "Miami",
    "country": "USA",
    "number": 1234
   }]
 }

我甚至拥有Chrome的Ember扩展名,我可以看到(通过向下钻取到令人困惑的对象结构中)从调用返回的数据包含有关硬件商店的所有详细信息:城市,国家/地区等。

问题是,我无法获取任何数据。什么都行不通。

hwStore.objectAt(0); //<-- undefined
hwStore.firstObject; //<-- undefined
hwStore.firstObject.property('model.[]') //<-- undefined is not a function

我无法&#34;得到&#34;任何要进行验证的数据,并显示模态。我已经尝试了所有这些:

hwStore.objectAt(0).get('city');
hwStore.firstObject.get('city');

没有任何作用。为什么这么混乱?

1 个答案:

答案 0 :(得分:2)

Ember Data返回一个promise,而不是阻塞同步结果。

var hwStore = store.find('hwStores', { number: value });

您需要等待承诺解决才能获得通话结果

hwStore.then(function(results){
  console.log(results.get('firstObject.city'));
  console.log(results.objectAt(0).get('city'));
});

以下是一个例子

http://emberjs.jsbin.com/OxIDiVU/506/edit