javascript - EmberJS 基于数组的计算属性不起作用

标签 javascript arrays ember.js computed-properties

我有一个 EmberJS Controller ,它具有以下计算属性:

hasSelectedRequirements: Ember.computed('selectedRequirements.[]', function()    {
    console.log("this should get printed but it doesn't");
    return this.get('selectedRequirements').length > 0;
}),

它设置了我在模板中使用的 bool 标志来有条件地显示 html。

我还有一个按钮,单击该按钮时,会获取表单数据并通过调用 addRequirement 操作将元素推送到 selectedRequirements 数组

actions: {
    addRequirement() {
        ...
        // extract data from form and create the requirement variable

        var selectedRequirements = this.get('selectedRequirements');
        selectedRequirements.push(requirement);
        this.set('selectedRequirements', selectedRequirements);

        console.log(this.get('selectedRequirements')); // does print as expected
    }
}

如果我将 addRequirement 函数更改为此,则 hasSelectedRequirements 计算属性的函数处理程序将按预期运行,并且 console.log 语句将起作用:

actions: {
    addRequirement() {
        ...
        // extract data from form and create the requirement variable

        var selectedRequirements = this.get('selectedRequirements');
        selectedRequirements.push(requirement);

        // create a new, local array
        var arr = new Array();
        arr.push(1);

        this.set('selectedRequirements', arr);

        console.log(this.get('selectedRequirements')); // does print as expected
    }
}

Ember 的计算属性似乎依赖于正在观察的数组是一个完全不同的数组?

问题是计算属性无法识别元素已添加到 selectedRequirements 数组中,并且计算属性函数永远不会被调用(console.log 语句永远不会运行)。为什么计算属性无法识别 selectedRequirements 数组已被修改以及如何修复计算属性代码?

最佳答案

使用pushObject,例如this.get('selectedRequirements').pushObject(obj);

关于javascript - EmberJS 基于数组的计算属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253549/

相关文章:

javascript - jQuery 事件处理程序方法 - 混合对

java - 通用整数类型到字符类型的转换

java - 如何使用现有数组的分割部分填充新数组? ( java )

javascript - 为什么 Ember 将所有内容安装为 devDependencies 而不是正常的依赖项

ember.js - 不想在 Ember.Collection View 中使用任何标签(包括默认的 div 标签)

带有多个选项卡弹出警报的 Javascript session 超时

javascript - 将 npm 模块集成到一个普通的 Javascript 应用程序中,不知道如何修复错误

javascript - AppS 脚本/Javascript - 在周五的日期上添加 2 天,以便跳过周末

javascript - 比较和过滤两个数组

ember.js - 每当 {{input}} Ember Handlebars 帮助器的值发生变化时调用 Controller 方法