我有这样一条路线:
App.RandomThingRoute = Ember.Route.extend({
model: function() {
return App.Thing.find("random");
}
});
前往/things/random
API endopoint。
我也是控制器中的一个动作:
App.RandomThingController = Ember.ObjectController.extend({
displayRandomThing: function() {
return this.content.reload();
}
});
重新加载模板中的随机内容。
我刚刚开始使用Ember.js(或任何MVC前端框架)并且我有一些疑问/问题:
this.content.reload()
)?old_thing
参数,该参数允许获取与当前显示的不同的随机事物:/things/random?old_thing=Something
。在Ember.js中实现这个的最惯用/最正确的方法是什么?如何将此old_thing
传递给find()
和reload()
?我应该按照此处的建议使用视图:Preferred way to retrieve data from a template in EmberJS?我很难找到一些关于ember-data
的文档(一切都觉得过时)。
答案 0 :(得分:0)
1 - 我宁愿在控制器中以这种方式重新加载内容:
reloadContent: function(){
this.set('content', App.Thing.find("random"));
}
2 - 如果你想将参数传递给你的GET(假设你正在使用RESTAdapter),你可以使用哈希传递它们。
App.Thing.find({old_thing: 'oldThing');
但这里有一些“腥”的东西。 Model.find需要一个id或一个哈希。你的'随机'有点像。
我不知道你是否可以在你使用“随机”时加注参数。这种感觉有点不对,因为你已经开始想要获得单个项目,但是也在发送哈希以过滤项目。 (doh不是你的意图)
答案 1 :(得分:0)
我来找这个问题的答案,最后来到这里。我需要为我的模型找到一个随机记录,并且不确定如何调用商店的find方法。
在查看ember-data源之后,我发现将对象传递给find方法会将存储从findById切换到findQuery。
这让我觉得为一个随机对象调用find的一个不错的方法可能是:
App.Thing.find({random:true, old_thing: 'oldThing', limit:1});
这些将转换为查询参数,然后您需要修改您的API'Thing'端点以接受。
api/thing?random=true&old_thing=oldThing&limit=1
允许将随机标记和限制作为参数传入,这意味着您不必使用额外的路径来查找API以查找随机记录。
我不确定这是否是最常用的方式,但这是我选择的方式。
编辑:
请注意,如果您这样查询,您的API与Ember Data结合应该返回一个包含一个元素的数组。现在,因为调用是异步调用的,所以在调用“find”后不会立即定义该元素,所以你必须添加一个观察者来在项目加载后更新控制器的内容。
在我的赛道控制器上有这样的东西:
, randomiseTrack: function(){
var _this = this
var currentTrackId = this.get('content.id')
var loadingTrackList = App.Track.find({
random:true,
current_track_id: currentTrackId,
limit: 1
});
loadingTrackList.addObserver("isLoaded", function(){
_this.set('content', loadingTrackList.materializedObjectAt(0));
});
}