定义模型和路由以构建可用作应用程序数据的模型的正确方法是什么。
App.Router.map(function(){
this.resource("main", {path:"/"});
});
App.MainRoute = Ember.Route.extend({
model:function(){
return App.Main.find();
}
});
App.Main = DS.Model.extend({
appName:DS.attr('string')
});
App.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.create({
namespace: 'api/v1'
})
});
这最终会调用api/v1/mains
。但我希望它调用api/v1/main
来返回应用程序数据,这是一个像
{
"appName":"MyApp",
"lastLogin": "Sat May 11 2013 11:20:03 GMT+0530",
...
}
我知道配置复数,但相信这不是正确的方法。 任何帮助,将不胜感激。提前谢谢。
编辑:配置Plurals时,它不是渲染模板
App = Ember.Application.create();
App.Router.map(function(){
this.resource("main", {path:"/"});
});
App.MainRoute = Ember.Route.extend({
model:function(){
return App.Main.find();
}
});
DS.RESTAdapter.configure("plurals", {
main: "main"
});
App.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.create({
namespace: 'api/v1'
})
});
App.Main = DS.Model.extend({
"appName":DS.attr('string')
});
json从服务器
收到{
"main": {
"app_name": "My App"
}
}
模板:
<script type="text/x-handlebars" data-template-name="main">
This is {{appName}}
</script>
答案 0 :(得分:1)
原始问题在于您调用App.Main.find()
这将自动导致为Ember.Arraycontroller
content
创建MainController
(自动生成,因为您的路由命名)。这也会调用请求您的模型的复数版本。
因此,通过将复数修改为指向/ main,您将在显示时检索信息,但仍会在Ember.ArrayController
内呈现。因此,要查看此内容,您需要通过{{#each}}
运行模板。所以如果你模仿它可能会有效:
<script type="text/x-handlebars" data-template-name="main">
{{#each main}}
This is {{appName}}
{{/each}}
</script>
通过解析find()
中的密钥来识别单个记录的解决方案是正确的,因为(正如您已经正确说明的那样)会调用单个(Ember.ObjectController
)的创建,然后可以直接讯问。
答案 1 :(得分:0)
不确定这是否是正确的方法,但通过调用
解决了这个问题App.Main.find("data");
并在服务器端定义路由/api/v1/main/data
。
因此,App.Main.find("data");
的工作方式就像从记录列表中提取单个记录,并为ObjectController
生成main