繁体   English   中英

Ember.js:这种方法在哪里?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM