Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ember.js中实现先进先出的固定长度数组控制器_Ember.js - Fatal编程技术网

在Ember.js中实现先进先出的固定长度数组控制器

在Ember.js中实现先进先出的固定长度数组控制器,ember.js,Ember.js,我试图在Ember.js中实现一个固定长度的数组控制器,并使其在列表超出其容量时删除第一项。我的尝试如下,但失败了,出现了一个错误 编辑:我现在在 我有一个与阵列控制器关联的视图。我相信这个错误是由于这个观点。当我删除它的错误消失,我能够弹出第一个对象。(注意:在我尝试实现FIFO功能之前,该视图运行良好。) 我还尝试将popFirst函数的内容放入runloop(Ember.run(…)中) 有人知道我如何实现这个fifo阵列并使视图仍然工作吗 MyApp.fifoController=Emb

我试图在Ember.js中实现一个固定长度的数组控制器,并使其在列表超出其容量时删除第一项。我的尝试如下,但失败了,出现了一个错误

编辑:我现在在

我有一个与阵列控制器关联的视图。我相信这个错误是由于这个观点。当我删除它的错误消失,我能够弹出第一个对象。(注意:在我尝试实现FIFO功能之前,该视图运行良好。)

我还尝试将popFirst函数的内容放入runloop(Ember.run(…)中)

有人知道我如何实现这个fifo阵列并使视图仍然工作吗

MyApp.fifoController=Ember.ArrayController.create({
内容:[],
popFirst:(函数(){
if(this.get('length')>=3){
返回this.removeObject(this.get('firstObject'));
}
}).观察('长度')
});
{{{#每个MyApp.fifoController}
{{{#view MyApp.ItemView contentBinding=“this”}{{{/view}}
{{/每个}}
错误:
未捕获的TypeError:无法调用未定义的genigames/vendor/ember:16704的方法“\u insertElementLater”
DOMManager.com游戏/供应商/会员:16704
Ember.ContainerView.Ember.View.extend.\u日程安排/供应商/Ember:14708
Ember.ContainerView.states.hasElement.ChildViewsIDChange/vendor/Ember:14765
Ember.View.Ember.Object.extend.invokeForState/vendor/Ember:12902
Ember.ContainerView.Ember.View.extend.ChildViewsIDChange/vendor/Ember:14687
...

编辑:我现在在

上有一个简单的jsFiddle,我认为您在这方面做得不对。您正在观察长度、添加项目、删除和删除项目,并且仍在观察长度。相反,您应该在添加项目之前检查是否需要删除。Ember有一个非常好的mixin系统,因此您可以覆盖pushObject函数,检查删除情况,然后调用
\u super
进行添加。请参见此示例:

MyApp.fifoController = Ember.ArrayController.create({
    content: [],
    pushObject: function(object) {
        if (this.get('length') >= 4) {
            this.removeObject(this.get('firstObject'));
        }
        this._super.apply(this, arguments);
    }
});

您能发布App.ItemView的代码吗?或者更好的JSFIDLE?我不认为这会解决您的问题,但看看使用集合而不是每个集合是否有效我已经编辑了上面的问题,以包含指向JSFIDLE的链接:@Bradley Prist:用您的代码替换每个(除了初始哈希之外的所有内容——这不只是您想在视图中包含某些内容吗?)会导致完全相同的错误。因此,只要我使用pushObject,我可能会构造应用程序,以便始终调用pushObject,但在我看来,这并不像观察“长度”或在添加(试图添加)对象时以其他方式通知对象那样通用。