我已经开始使用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');
答案 0 :(得分:2)
使用render
或{{render}}
助手时,您使用其他控制器进行渲染。您必须提供要使用的模型。尝试更改为,
renderTemplate : function(controller) {
this.render('myTemplate', {
controller : controller
});
},
此处controller
是IndexRoute
的控件,即: - IndexController
,其中填充了model
个钩子。
您正在使用MyTemplateModel
循环浏览视图中的项目。您需要遍历content
,model
或controller
,这些都对应于支持该路由的模型。
{{#each item in content }}
<tr><td>
{{item.id}} <p> {{item.first_name}}</p>
</td></tr>
{{/each}}
除此之外,您可能需要在模型上声明rootKey
和collectionKey
以使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中查找它。希望这会有所帮助。