定义模型和路由以构建可用作应用程序数据的模型的正确方法是什么。
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",
...
}
我知道配置复数,但我认为这不是正确的做法。 任何帮助,将不胜感激。提前致谢。
编辑:配置复数时它不是渲染模板
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>
最佳答案
最初的问题在于您调用 App.Main.find()
这将自动导致为 创建一个
你的 Ember.Arraycontroller
>contentMainController
(根据你的路由命名自动生成)。这也会调用请求您模型的复数版本。
因此,通过将复数形式修改为指向/main,您将检索信息,如您所示,但它仍呈现在 Ember.ArrayController
中。因此,要查看此内容,您的模板需要通过 {{#each}}
运行它。因此,如果您将其模板化,它可能会起作用:
<script type="text/x-handlebars" data-template-name="main">
{{#each main}}
This is {{appName}}
{{/each}}
</script>
您的解决方案是通过解析 find()
中的键来识别单个记录,这是正确的,因为(正如您已经正确说明的那样)调用创建单例 (Ember. ObjectController
) 然后可以直接询问。
关于javascript - 在 EmberJS 中构建单一模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494235/