所以我有一个非常简单的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在用户第一次点击页面之前不存在。 (因为它是动态生成的)所以我不能在页面加载时抓住它。
如果需要,我可以发布一个小提琴,但我正在寻找更多的概念/教学答案而不是一些只为我编写代码
答案 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
,您有:
我通常将所有把手文件存储在模板/文件夹中。如果将它们嵌套得更深,只需在视图对象中指定路径:
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来获取数据。