0

你们我有一个结构/程序问题要问你们。

所以我有一个非常简单的 ember 应用程序,尝试使用 ember-data,但我不确定我是否“做对了”。所以用户点击我的索引模板,我获取他们的位置坐标并对其进行编码(这部分有效)。然后在我的服务器上,我有一个存储以哈希坐标命名的“瓷砖”的数据库(如果我到达我的#/tiles/H1A2S3H4E5D路线,我会返回格式正确的 JSON)。

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

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

我确实看过一些教程视频,但它们似乎都与旧路由器过时了。

主要想知道:
1. 返回的信息在哪里App.find();生活以及如何访问它?
2.构建模板/视图以处理此问题的“正确”方法是什么?
3.我应该如何将该id(哈希坐标)传递给App.find?作为全局变量?或者,还有更好的方法?

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

如果需要,我可以发布小提琴,但我正在寻找更多概念/指导性答案,而不是为我编写代码的人

4

2 回答 2

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
  • 平铺 = 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));
  }
});

我希望这会有所帮助。

于 2013-04-01T14:21:17.530 回答
0

我相信您可以利用 ember 中的数据绑定,基本上有一个用于切片的数组控制器,并将内容最初设置为一个空数组。然后我们返回您的响应,执行 App.find() 并使用返回的数据设置图块控制器的内容。这应该通过数据绑定更新视图。(非常高水平的反应)

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

于 2013-04-01T14:28:33.840 回答