从数组返回第一个元素作为Ember控制器子类的计算属性

尔特里斯

我试图将数组的第一个元素作为计算属性从控制器返回给模板。我的代码如下。我对阵列和模板的了解是100%。问题是我在控制器中的语法。基本上,我的数组是由Work对象组成的作品。我最好返回第一个元素Work。在javascript中甚至有可能吗?

最好。

//控制器works.js

import Ember from "ember";
  export default Ember.Controller.extend({
  firstElement: function () {
    var arr = this.get('model');
    return arr[0];
    console.log(arr[0]);
  }.property('Work')
});

//模板works.js

<div class="right">
  {{#liquid-with model as |currentModel|}}
    {{firstElement}}
  {{/liquid-with}}
</div>

//路由works.js

import Ember from 'ember';

var Work = Ember.Object.extend({
  name: '',
  year: '',
  description:'',
  image:'',
  logo:'',

  work_id: function() {
    return this.get('name').dasherize();
  }.property('name'),


});

var minibook = Work.create({
  id: 1,
  name: 'MINIBOOK',
  year: '2014',
  description:'MiniBook is an iphone app that explores storytelling in its own format. The format',
  image:'assets/images/minibook_iphone.png',
  logo:'assets/images/minibook_logo.png'
});

var poetics = Work.create({
  id: 2,
  name: 'POETICS',
  year: '2013',
  description:'Lorem Ipsum Poetics',
  image:'assets/images/poetics_iphone.png',
  logo:'assets/images/poetics_logo.png'
});


var WorksCollection = Ember.ArrayProxy.extend(Ember.SortableMixin, {
  sortProperties: ['id'],
  sortAscending: true,
  content: []
 });


var works = WorksCollection.create();

works.pushObjects([poetics, minibook]);


export default Ember.Route.extend({
  model: function() {
    return works;
  }


});
阿蒂奇

这会起作用。

很长的路要走(只是为了改善您的计算属性代码):

// controller work.js
import Ember from "ember";
export default Ember.Controller.extend({
  firstElement: function () {
    return this.get('model').get('firstObject'); // or this.get('model.firstObject'); 
  }.property('model.[]')
});

1)您将其设置worksmodel在路线中,因此您可以将其设置为model在控制器中

2).property(model.[])表示数组的计算属性,因此添加和删除数组元素将触发更新。您还可以选择一些特定的属性,即.property([email protected])

3)fistObject是正确的方法(不是[0]),因为您正在使用Ember.ArrayProxy,请参见http://emberjs.com/api/classes/Ember.ArrayProxy.html

4)您可以在模板中使用{{firstElement}}

懒惰的方式

1)在路由中将模型设置为数组或在数组中解析为promise

// works = ... as is
export default Ember.Route.extend({
  model: function() {
    return works;
  }
});

2)model.firstObject直接进入模板

//template works
{{model.firstObject}} {{!-- first object of model array --}}
{{model.firstObject.name}}  {{!-- name of first object --}}

更新:使用适当的迭代语法http://ef4.github.io/liquid-fire/#/helpers/liquid-with/10

{{#liquid-with model as currentModel}}
  {{currentModel.firstObject.name}}
{{/liquid-with}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何返回情节提要上的第一个视图控制器?

我应该使用presentViewController 返回到第一个视图控制器吗?

将控制器属性设置为第一个模型

返回数组的 Computercraft 函数,使用第一个元素作为布尔值

Javascript - 计算多维数组的第一个元素

在def中返回数组的第一个元素

从数组中删除第一个元素并返回减去第一个元素的数组

数组第一个元素

JavaFX如何从第一个控制器访问第二个控制器的控件

集合上的Laravel块将第一个元素作为数组返回,第二个作为对象返回

Vue:Filter返回一个数组,如何获取第一个元素

在第一个视图控制器出现后做一些事情

尝试为我的 nodejs 控制器编写我的第一个“全局”函数

symfony2创建第一个控制器,但404

无法显示第一个控制器iOS Swift

如何退回到导航堆栈上的第一个视图控制器

控制器只识别第一个选择的选项

Xcode中选项卡栏控制器视图的第一个视图

laravel 5.1路由组仅需要第一个控制器?

没有通过第一个视图控制器接收UIImage

缺少使用导航控制器从第一个视图控制器到第二个视图控制器的过渡

根据子数组的位置和数组的第一个元素计算和

保留数组的第一个元素作为序列的一部分

返回数组的第一个元素不是空元素

数组返回第一个元素char而不是整个元素

结构指针数组作为struct的第一个元素

红宝石哈希作为数组的第一个元素

使用数组的第一个元素作为顶部实现堆栈

如何在对象中找到作为数组的第一个属性?