无法使用Ember-Model显示JSON数据

时间:2013-07-24 11:05:31

标签: json ember.js ember-model

我已经开始使用Ember Model,但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');

2 个答案:

答案 0 :(得分:2)

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

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

此处controllerIndexRoute的控件,即: - IndexController,其中填充了model个钩子。

编辑:发布jsbin

您正在使用MyTemplateModel循环浏览视图中的项目。您需要遍历contentmodelcontroller,这些都对应于支持该路由的模型。

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

除此之外,您可能需要在模型上声明rootKeycollectionKey以使ember模型正确识别您的json响应。

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

这是一个更新的jsbin

答案 1 :(得分:0)

我需要做的才能让它工作是在我的JSON序列化程序中指定没有root。换句话说,而不是......

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

看起来像:

{
  id: 1,
  etc....
}

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