现在我正在浏览Ember.js指南中的每一页和代码片段,并构建一个小样本应用程序.有些我已经坚持了一段时间但已经解决了.然而,这个让我迷惑不解.
在http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/ 它也在这里,但不使用.get('songs")http://emberjs.com/guides/controllers/表示-一个单模型与- objectcontroller /
App.SongsRoute = Ember.Route.extend({
setupController: function(controller, playlist) {
controller.set('model', playlist.get('songs'));
}
});
Run Code Online (Sandbox Code Playgroud)
我不知道playlist.get('songs')引用了什么.我假设它是一个模型对象数组内部对象但显然我错了.但是,由于他们站点的示例代码没有模拟存根数据可以工作,我只是猜测我的所有测试.
这里提供的代码有一些注释掉的位,看看我在测试什么.
<script type="text/x-handlebars" data-template-name="songs">
<h1>Playlist</h1>
<ul>
{{#each}}
<li>{{name}} by {{artist}}</li>
{{/each}}
</ul>
</script>
<script type="text/x-handlebars" data-template-name="playlist">
<h3>Playlist: </h3>
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/ember.js/1.0.0-rc.6/ember.min.js"></script>
<script type="text/javascript">
window.App = Ember.Application.create();
App.Router.map(function () {
this.resource('songs');
this.resource('playlist');
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('songs');
}
});
// App.SongsRoute = Ember.Route.extend({
// setupController: function(controller, model) {
// controller.set('model', model);
// },
// model: function () {
// // return songs;
// return playlist.songs;
// }
// });
App.SongsRoute = Ember.Route.extend({
playlist: function() {
var playlist = { songs: [{fish: "fish"}, {fish: "fish"}] };
return playlist;
}.property(),
setupController: function(controller, playlist) {
controller.set('model', playlist.get('songs'));
}
});
App.PlaylistRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('model', model);
},
model: function () {
return playlist;
}
});
App.SongsController = Ember.ArrayController.extend();
var songs = {
duration: 777,
name: 'Ember',
artist: 'Jimmy Smith',
};
var playlist = {
songs: [
{
id: 1,
duration: 777,
name: 'Ember',
artist: 'Jimmy Smith',
},
{
id: 2,
duration: 888,
name: 'jQuery',
artist: 'Hyper Cat',
}
]
};
</script>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个链接(http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/)有点令人困惑.他们假设存在模型关系,但他们没有表现出来.
他们假设有这样的事情:
App.Playlist = DS.Model.extend({
name : DS.attr('string'),
songs : DS.hasMany('song',{async:true})
});
App.Song = DS.Model.extend({
name : DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
然后,通常你想要做的是从modelin中拉出集合setupController,然后将其设置为由主控制器编写content的嵌套need控制器.
App.PlaylistRoute = Ember.Route.extend({
setupController : function(controller,model){
this._super(controller,model);
this.controllerFor('songs').set('content',model.get('songs'));
}
});
App.PlaylistController = Ember.ObjectController.extend({
needs : ['songs']
});
Run Code Online (Sandbox Code Playgroud)
然后,因为您正在使用ArrayController该集合,所以如果您定义了sortProperties和sortAscending属性,则已经内置了排序.
App.SongsController = Ember.ArrayController.extend({
sortProperties : ['name'],
sortAscending : true
});
Run Code Online (Sandbox Code Playgroud)
这是一个JSBin,显示了一般的想法,使用FixtureAdapter.
http://jsbin.com/ucanam/1073/edit
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |