2

我已经开始使用 Ember 模型,但是 JSON 数据没有加载到视图中。此外,我没有在控制台上收到错误或警告。

这是我的 app.js,

App = Ember.Application.create({});

App.IndexRoute = Ember.Route.extend({
    renderTemplate : function(controller) {
         this.render('MyTemplate', {
             controller : 'Index'

        });
    },
    model : function() {
        return App.MyTemplateModel.find();
    }
});

App.IndexController = Ember.ArrayController.extend({

});


App.MyTemplateModel = Ember.Model.extend({
    id : Ember.attr(),
    last_name : Ember.attr(),
    first_name : Ember.attr(),
    suffix : Ember.attr(),
    expiration : Ember.attr()
});

App.MyTemplateModel.url = "http://ankur1.local/index.php/api/example/users/";
App.MyTemplateModel.adapter = Ember.RESTAdapter.create();
var existing = App.MyTemplateModel.find();
App.MyTemplateModel.camelizeKeys = true;

这是我的 HTML,

<body>
        <script type="text/x-handlebars" data-template-name="myTemplate">
            <input type="text" id="name" placeholder="name!"/>
            <button {{action clickButton}} >Button</button>
            {{view Ember.TextField valueBinding="userName"}}

            <label >{{userName}}</label>

            {{#each item in model}}
            <tr><td>
            {{id}} <small> {{item.first_name}}</small>
            </td></tr>
            {{/each}}
        </script>

        <script type="text/x-handlebars">
            <h1>Application Template</h1>
            {{outlet}}
        </script>

    </body>

我的代码中可能缺少什么?

此外,我可以在控制台上使用,

var u = App.MyTemplateModel.find(1); 
u.get('first_name');
4

2 回答 2

2

当您使用renderor{{render}}助手时,您正在使用不同的控制器进行渲染。您必须为其提供要使用的模型。尝试更改为,

renderTemplate : function(controller) {
    this.render('myTemplate', {
        controller : controller
    });
},

controllerIndexRouteie:-的控制器,IndexController其中填充了model钩子。

编辑:发布 jsbin

您正在使用MyTemplateModel循环查看视图中的项目。您需要遍历contentmodel或者controller它们都对应于支持该路由的模型。

{{#each item in content }}
  <tr><td>
  {{item.id}} <p> {{item.first_name}}</p>
  </td></tr>
{{/each}} 

除此之外,您可能需要在模型上声明rootKeyandcollectionKey才能让 ember-model 正确识别您的 json 响应。

App.MyTemplateModel.rootKey = 'user';
App.MyTemplateModel.collectionKey = 'users';

这是一个更新的jsbin

于 2013-07-24T16:27:29.000 回答
0

我需要做的是在我的 JSON 序列化程序中指定没有根。换句话说,而不是...

{
  MyTemplateModel:
  {
    id: 1,
    etc...
  }
}

看起来像:

{
  id: 1,
  etc....
}

我只能假设,因为 ember-model 已经期望模型MyTemplateModel作为响应,它不会在 JSON 中查找它。希望这可以帮助。

于 2014-03-09T17:48:05.933 回答