ember-data'live'返回的数据在哪里?

时间:2013-04-01 13:30:15

标签: javascript ember.js handlebars.js ember-data

你知道我有一点结构/程序问题吗?

所以我有一个非常简单的ember应用程序,试图使用ember-data而我只是不确定我是否'做得对'。所以用户点击我的索引模板,我抓住它们的位置坐标并编码它的散列(该部分有效)。然后在我的服务器上,我有一个存储'tiles'的数据库,以hash'd coords命名(如果我点击我的#/tiles/H1A2S3H4E5D路由,我会恢复格式正确的JSON)。

我希望接下来发生什么,如果要在第一页底部向用户显示每个返回的图块(如部分可能?如果把手那样做)。

如果我将Hash'd电线硬编码为DS.Model,我的瓷砖有App.find(H1A2S3H4E5D);我可以看到我的服务器正确响应查询。但是,我似乎无法弄清楚如何访问返回的JSON对象,或者如何将其显示给用户。

我确实观看了一些教程视频,但它们似乎都已经过时了。

主要是我想知道:
 1. App.find()返回的信息在哪里;生活与怎么访问它?
 2.构建我的模板/视图以处理这个问题的“正确”方法是什么?  3.我应该如何将该ID(hash'd coords)传递给App.find?作为全球变量?还是有更好的方法?

最大的问题(对我来说)似乎是我搜索的id在用户第一次点击页面之前不存在。 (因为它是动态生成的)所以我不能在页面加载时抓住它。

如果需要,我可以发布一个小提琴,但我正在寻找更多的概念/教学答案而不是一些只为我编写代码

2 个答案:

答案 0 :(得分:0)

我还在和Ember学习很多东西,但这是我的理解。当您按照指南和教程进行操作时,您将拥有以下内容:

App.TileController = Ember.ObjectController.extend();

App.TileRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('content', App.Tile.find(MYHASH));
  }
});

它的作用是将特殊内容对象设置为结果。因此,由于我们声明了一个对象控制器,并使用参数调用find,因此它知道预期会有一个结果。所以一个观点&将加载遵循Tile命名约定的模板。在那里,您可以访问Tile对象的属性:

<p>{{lat}}</p><p>{{lng}}</p>

我不得不承认,有时候这感觉有点神秘。它的核心是命名约定。您需要非常具体地说明如何命名所有各种控制器,路由等。一旦确定了这一点,就需要将您想要的数据绑定到控制器的内容。

1)除了“在内存中”的通用答案之外,.find()调用在你返回的地方生活。一般来说,这应该设置在控制器的“内容”属性上。

2)我或多或少地回答了这个问题,但一般来说,你采取了你的路线的名称,并以此为基础。因此,对于路线TileRoute,您有:

  • TileController = Ember.ObjectController.extend
  • Tile = DS.Model.extend
  • TileView = Ember.View.extend
  • tile.handlebars

我通常将所有把手文件存储在模板/文件夹中。如果将它们嵌套得更深,只需在视图对象中指定路径:

App.TileView = Ember.View.extend({
  templateName: "tiles/show"
});

3)这实际上取决于您的应用。一般来说,对于从URL获取的id或在函数中本地构造的id更好。由于您正在编码哈希,我想你是在函数中执行此操作,然后调用find。我为Array控制器做了一些类似的事情。

我不知道你在什么时候生成哈希,所以让我们说它是onload。您应该能够在setupController函数中生成哈希。

App.TileRoute = Ember.Route.extend({
  generateHashBasedOnCoords: function() {
    // ...
  },
  setupController: function(controller) {
    var MYHASH = this.generateHashBasedOnCoords();
    controller.set('content', App.Tile.find(MYHASH));
  }
});

我希望有所帮助。

答案 1 :(得分:0)

我相信你可以在ember中使用数据绑定,并且基本上有一个用于tile的数组控制器,并且最初将内容设置为空数组。然后我们回复你的响应做一个App.find()并用返回的数据设置tiles控制器的内容。这应该通过数据绑定更新视图。 (非常高的响应)

数据本身存储在使用ember数据设置的商店中。您可以使用与使用模型方法App.Tile.find()等相同的方法访问它。它会检查所需的数据是否在商店中,如果是这样,它会返回数据,否则它会调用api来获取数据。