Ember.js数组的上一个/下一个元素

时间:2016-10-30 12:46:54

标签: javascript ember.js

我想创建一个类似队列的数组,我不知道如何移动到下一个元素。我没有使用for循环进行迭代,因为如果删除数组的元素就会出现问题。

我该怎么办?

编辑: 我应该放一个示例代码: 在控制器中创建数组:

listOfItems:[{name:'Jack',specialty:'engineer'},{name:"Eva",speciality:"doctor"}]

接下来将值设置为把手

counter:0,
actions:{
    openModal()
    {
        this.set('openModal',true);
        this.set('nameOfPerson',this.get('listOfItems.'+counter+'.name');
    }
    nextValue()
    {
         this.incrementProperty('counter'); //I want to implement there
                                            //something like next Object
    }
    previousValue()
    {
        this.decrementProperty('counter'); //  previous object there
    }
    acceptValues()
    {
        //don't know how to do a delete object there
    }
}

1 个答案:

答案 0 :(得分:1)

我建议您使用新属性,就像这样。

counter: 0,
currentItem: function() {
    return this.get('listOfItems').objectAt(this.get('counter'));
}.property('counter', 'listOfItems.[]')
actions:{
    openModal() {
        this.set('openModal',true);
        this.set('nameOfPerson',this.get('currentItem.name');
    },
    acceptValues() {
        let counter = this.get('counter');

        this.get('listOfItems').removeAt(counter); // Assumes an Ember.MutableArray

        if(counter > 0) {
            // If we are at the first item, just let the second value be selected,
            // if any other value is removed, decrement the counter by one to select
            // the previous item
            this.decrementProperty('counter');
        }
    }        
}

这样,您还可以根据需要直接绑定到模板中的currentItem,这样就可以避免使用nameOfPerson并使用currentItem.name

acceptValues方法只是从数组中删除项目,并且可以减少countercurrentItem属性将失效,因为它取决于listOfItems.[](即项目数更改时更新)。