Model view controller Ember.js:如何访问CollectionView中的特定项目?
首先,我想说我真的很喜欢ember.js。我尝试过击倒和角球,但发现他们有点突兀,一切都必须按他们的方式进行。我觉得余烬让我有了更多的自由来组织你认为合适的事情。说到这里,我有几个问题 1。我想做一些类似以下的事情,但显然不起作用:Model view controller Ember.js:如何访问CollectionView中的特定项目?,model-view-controller,ember.js,Model View Controller,Ember.js,首先,我想说我真的很喜欢ember.js。我尝试过击倒和角球,但发现他们有点突兀,一切都必须按他们的方式进行。我觉得余烬让我有了更多的自由来组织你认为合适的事情。说到这里,我有几个问题 1。我想做一些类似以下的事情,但显然不起作用: 相反,我必须创建一个绑定: 如何在视图中创建url路径?我可以很容易地在模型上创建一个名为url的计算属性,但这感觉很糟糕,而且不是很MVC。我必须为元素创建一个新视图还是注册一个感觉有点麻烦的助手 以下是完整的代码: App = Ember.Applicati
相反,我必须创建一个绑定:
如何在视图中创建url路径?我可以很容易地在模型上创建一个名为url的计算属性,但这感觉很糟糕,而且不是很MVC。我必须为元素创建一个新视图还是注册一个感觉有点麻烦的助手
以下是完整的代码:
App = Ember.Application.create();
var sampleData = [ Ember.Object.create({ id: '123456789', name: 'John' }), Ember.Object.create({ id: '987654321', name: 'Anne' }) ]
App.itemController = Ember.ArrayController.create({
content: sampleData,
removeItem: function(item) {
this.content.removeObject(item);
}
});
App.ItemListView = Ember.View.extend({
itemDetailView: Ember.CollectionView.extend({
contentBinding: 'App.itemController',
itemViewClass: Ember.View.extend({
tagName: 'li',
url: '' // HOW TO GET '/item/123456789'
deleteButton: Ember.Button.extend({
click: function(event) {
var item = this.get('content');
App.itemController.removeItem(item);
}
})
})
})
});
<script type="text/x-handlebars">
{{#view App.ItemListView}}
<ul id="item-list">
{{#collection itemDetailView}}
<div class="item">
<a {{ bindAttr href="url" }}><h3>{{ content.name }}</h3></a>
{{#view deleteButton class="btn" contentBinding="content"}}Delete{{/view}}
</div>
{{/collection}}
</ul>
{{/view}}
</script>
App=Ember.Application.create();
var sampleData=[Ember.Object.create({id:'123456789',name:'John'}),Ember.Object.create({id:'987654321',name:'Anne'})]
App.itemController=Ember.ArrayController.create({
内容:样本数据,
removeItem:功能(项){
this.content.removeObject(项);
}
});
App.ItemListView=Ember.View.extend({
itemDetailView:Ember.CollectionView.extend({
contentBinding:'App.itemController',
itemViewClass:Ember.View.extend({
标记名:“li”,
url:“”//如何获取“/item/123456789”
deleteButton:Ember.Button.extend({
单击:功能(事件){
var item=this.get('content');
App.itemController.removietem(项目);
}
})
})
})
});
{{{#查看App.ItemListView}
{{{#collection itemDetailView}
{{{查看删除按钮class=“btn”contentBinding=“content”}删除{{/view}
{{/collection}
{{/view}
2。我觉得视图“拥有”了控制器,而不是相反。视图不应该不知道它连接到哪个控制器,这样您就可以重用视图了吗?我在想视图中的这些线条:
contentBinding:'App.itemController',
及
App.itemController.removietem(项目)代码>
你是如何构造这个的
3。我意识到一切都是一项正在进行中的工作,而且随着名称的改变,一切都是新的,但文档却不清楚。这些示例使用旧的名称空间SC,与Sproutcore 2.0指南相比,emberjs.com上缺少很多东西,例如集合、ArrayController。我在这里的某个地方读到,藏品将被淘汰。这是真的吗?我应该用#每个来代替吗
感谢您的帮助和一个很棒的框架 1.)如果要使用
,则需要计算属性。它可以在您的模型上或视图上。另一种方法是使用Ember.Button:{{{{#查看Ember.Button标记名=“a”target=“…”action=“…”}}}}{{/view}}
2.)通常,您希望在模板中而不是在视图中声明控制器绑定。例如:{{{}查看App.ItemListView contentBinding=“App.itemController”}
3.#集合
帮助程序可能会被弃用,因此您可能应该改用#each
。谢谢!我不知道如何在视图上创建computed属性,但下面是一个示例,如果有人对url:function(){var id=this.getPath('content.id')返回'/apps/'+id;}.property('content.id')
不推荐使用的集合上的任何引用?或者我可以去哪里了解像这样的余烬新闻呢?Peter Wagnet刚刚在IRC聊天中告诉我将我的{{{each}}块转换为一个集合。Peter在开发Ember.js方面相当活跃,所以我想知道团队是否已经改变了对不推荐CollectionView的想法。