[英]Ember.js: Where does this method go?
从Rails来到Ember,我正在努力的一个地方是试图找出Ember对模型,视图和控制器的定义。
我只是测试了一些Ember代码示例。 我通过GitHub API获取用户事件,我想将类型名称更改为可读的内容。
我在这里有一个jsbin,但这里是要点:
App = Ember.Application.create();
App.IndexRoute = Ember.Route.extend({
model: function(){
return Ember.$.getJSON('https://api.github.com/users/thenickcox/events').then(function(data){
return data.splice(0,7);
});
}
});
我有一个方法,键入一个类型并返回一个字符串:
interpretType: function(type){
if (type === 'PushEvent') {
return 'Pushed';
}
return name;
}
在Rails中,这将继续在模型上。 但这里唯一的模型是Ember默认在内存中创建的模型(对吗?)。 所以我想,这是数组中每个成员都需要的东西,因为这是视图:
<h3> Some events</h3>
<ul>
{{#each}}
<li>I {{interpretType(type)}} to {{repo.name}}</li>
{{/each}}
</ul>
那么Ember.ArrayController
上有什么东西呢? 我尝试过,像这样:
App.IndexController = Ember.ArrayController.extend({
interpretType: function(type){
if (type === 'PushEvent') {
return 'Pushed';
}
return name;
}.property()
});
这只是给了我一个错误。 我把它放在哪里?
PS。 所以你不必查看GitHub API,这是一个示例JSON对象:
{
id: "1890853674",
type: "CreateEvent",
actor: {
id: 702327,
login: "thenickcox",
gravatar_id: "63f35d9e50dfd73281126b051a51668a",
url: "https://api.github.com/users/thenickcox",
avatar_url: "https://2.gravatar.com/avatar/63f35d9e50dfd73281126b051a51668a?d=https%3A%2F%2Fa248.e.akamai.net%2Fassets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png&r=x"
},
repo: {
id: 14463966,
name: "thenickcox/whiskey_taster",
url: "https://api.github.com/repos/thenickcox/whiskey_taster"
},
payload: {
ref: "master",
ref_type: "branch",
master_branch: "master",
description: "My first ember/rails app"
},
public: true,
created_at: "2013-11-17T09:00:17Z"
},
把它放在Ember.ObjectController
ArrayController
处理与模型中的数据集合相关的方法,而ObjectController
处理与特定对象相关的方法。
我也在Rails背景下学习Ember。
如果您还没有遇到过这个问题,那么您将需要查看ember-tools ,它是一个非常类似于我们在rails中获得的命令行生成器。 我无法想象建立一个没有类似东西的Ember应用程序。
这是一个更新的JSBin
基本上, each
可以指定itemController来装饰模型。
App.EventController = Ember.ObjectController.extend({
interpretType: function(){
var type = this.get('model.type');
if (type === 'PushEvent') {
type = 'Pushed';
}
return type;
}.property('model.type')
});
Handlebars没有你编写的功能,但由于我们现在使用包装单个模型的事件控制器,我们只需要引用interpretType来进行翻译:
{{#each itemController='event'}}
<li>{{interpretType}} to {{repo.name}}</li>
{{/each}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.