4

定义模型和路由以构建可用作应用程序数据的模型的正确方法是什么。

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>
4

2 回答 2

1

最初的问题在于您调用App.Main.find()这将自动导致为您创建一个Ember.Arraycontrollercontent由于MainController您的路由命名而自动生成)。这也调用请求模型的复数版本。

因此,通过修改复数以指向 /main,您将检索信息,如您所展示的,但它仍呈现在Ember.ArrayController. 因此,要查看此内容,您的模板需要通过{{#each}}. 因此,如果您将其模板化,它可能会起作用:

<script type="text/x-handlebars" data-template-name="main">
  {{#each main}}
    This is {{appName}}
  {{/each}}
</script>

您的解决方案通过解析 中的密钥来识别单个记录find()是正确的,因为(正如您已经正确指出的那样)调用创建一个单例 ( Ember.ObjectController),然后可以直接询问该单例 ()。

于 2013-05-11T23:12:13.453 回答
0

不确定这是否是正确的方法,但通过调用解决了这个问题

App.Main.find("data");

并在服务器端定义路由 /api/v1/main/data

结果App.Main.find("data");就像从记录列表中获取单个记录并ObjectControllermain

于 2013-05-11T16:18:31.890 回答