Ili*_*oly 4 javascript ember.js
我有一个ArrayController定期更新的.它有一个sorted计算属性,可以保持秩序.我正在尝试使用CollectionView它content绑定到sorted属性的属性,但它不会以正确的顺序呈现它们.演示
我显然做出了错误的假设,即在content和childViews财产之间保持秩序.这样做的正确方法是什么?
把手:
<script type="text/x-handlebars" data-template-name="item">
id {{view.content.id}}
</script>
<script type="text/x-handlebars">
<ul>
{{collection
contentBinding="App.itemController.sorted"
itemViewClass="App.ItemView"
}}
</ul>
</script>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
?App = Ember.Application.create({
ready: function(){
// add a new object with a random id
// every second
setInterval(function(){
var id = Math.round(Math.random() * 100),
obj = Em.Object.create({ id: id });
App.itemController.pushObject(obj);
}, 1000);
}
});
// Collection Item View
App.ItemView = Em.View.extend({
tagName: "li",
templateName: "item"
});
App.itemController = Em.ArrayController.create({
// random order
content: Em.A([
Em.Object.create({ id: 5 }),
Em.Object.create({ id: 3 }),
Em.Object.create({ id: 10 }),
Em.Object.create({ id: 6 }),
Em.Object.create({ id: 1 }),
Em.Object.create({ id: 2 }),
Em.Object.create({ id: 100 }),
]),
// filtered content
sorted: function(){
return this.get('content').sort(function(a,b){
return a.get('id') - b.get('id');
});
}.property("@each")
});
Run Code Online (Sandbox Code Playgroud)
为了完整性@ sly7_7的正确答案,这里有一个版本CollectionView,请参阅http://jsfiddle.net/pangratz666/ctPAA/.
把手:
<script type="text/x-handlebars">
{{collection
tagName="ul"
contentBinding="App.itemController"
itemViewClass="App.ItemView" }}
</script>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
App.itemController = Em.ArrayController.create({
sortProperties: 'id'.w(),
// random order
content: Em.A([
...
])
});
Run Code Online (Sandbox Code Playgroud)
灵感来自这个答案:ember.js #each order by property
我使用ArrayController的排序属性:https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/sortable.js
我不使用CollectionView,而是使用简单的#each,并调用addObject而不是pushObject
模板
<script type="text/x-handlebars" data-template-name="item">
id {{view.content.id}}
</script>
<script type="text/x-handlebars" data-template-name="application">
<ul>
{{#each item in App.itemController}}
{{view App.ItemView contentBinding="item"}}
{{/each}}
<li>
</script>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
App = Ember.Application.create({
ready: function() {
// add a new object with a random id
// every second
setInterval(function(){
var id = Math.round(Math.random() * 100),
obj = Em.Object.create({ id: id });
// should call addObject, because pushObject does not sort the inserted item
//App.itemController.pushObject(obj);
App.itemController.addObject(obj);
}, 1000);
}
});
// Collection Item View
App.ItemView = Em.View.extend({
tagName: "li",
templateName: "item"
});
App.itemController = Em.ArrayController.create({
sortProperties: ['id'],
// random order
content: Em.A([
Em.Object.create({ id: 5 }),
Em.Object.create({ id: 3 }),
Em.Object.create({ id: 10 }),
Em.Object.create({ id: 6 }),
Em.Object.create({ id: 1 }),
Em.Object.create({ id: 2 }),
Em.Object.create({ id: 100 }),
]),
});
App.ApplicationView = Ember.View.extend({
templateName: 'application'
});
App.ApplicationController = Ember.Controller.extend();
App.Router = Ember.Router.extend({root: Em.Route.extend()});
App.initialize();?
Run Code Online (Sandbox Code Playgroud)
jsfiddle:http://jsfiddle.net/Sly7/LJAYk/
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |