【问题标题】:Ember controller set property in actionEmber 控制器设置属性在行动
【发布时间】:2015-01-14 20:52:57
【问题描述】:

ember 新手,这太愚蠢了,但我已经浪费了一天的时间。

我正在我的控制器中创建一个对象数组,用于在我的视图中构建单选按钮。

单击按钮时,我想切换单选输入上的 clicked 属性,使其显示为已单击。非常简单,但 Ember 不断向我抛出错误。

这是我的代码(编辑了一些错别字):

IndexController = Ember.ObjectController.extend({
    radioArray : function () {
        var a = [], i = 0;
        while (a.push({ index: i++, clicked: false }), i <= 10);
        return a;
    }.property('radioArray'),

    actions : {
        assignClick : function (item, index) {
             this.toggleProperty(item.clicked);

             // some unrelated business logic here
        }
    }
});

这与:

{{#each radioArray}}
    <label {{action "assignClick" this index}}>
        <input type="radio" {{bind-attr value=index checked=clicked}} /> foo
    </label>
{{/each}}

我只想显示正确的单选按钮已被点击。但是当我尝试在我的 ctrl 中将 clicked 设置为 true 时,我得到“未捕获的错误:断言失败:无法使用假键调用 get。”

【问题讨论】:

  • toggleProperty 是做什么的?似乎您在这里缺少一个概念; radioArray 直接映射到一组对象,但这些对象没有连接到任何东西。
  • 博格。我的意思是 this.toggleProperty(item.clicked)。试图从咖啡脚本翻译。那么这个数组应该是我模型上的属性还是什么?

标签: javascript dom ember.js handlebars.js


【解决方案1】:

如果您尝试使用Em.Object.toggleProperty,则需要Em.Object。 :) 有 Em.getEm.set 之类的函数,可用于 ember 和非 ember 对象,但没有函数 Em.toggleProperty 用于非 ember 对象。

但是,您可以使用 Em.set 和 Em.get 来实现切换行为:

Em.set(item, 'clicked', !Em.get(item, 'clicked'));

附:从属性本身设置属性依赖是没有意义的。 (我说的是radioArray : function () {...}.property('radioArray'))。

附言工作示例:http://emberjs.jsbin.com/memuwi/2/edit?html,js,output

【讨论】:

  • 感谢您的反馈。我仍然收到“未捕获的错误:断言失败:无法使用假密钥调用 get”的旧错误。我在您的示例中没有看到这一点,但这很奇怪。但是,单选按钮仍然没有在视觉上注册它的检查。显然我正在错误地处理这整个事情。您对我如何更简单地切换 中的点击有什么建议吗?
  • 你想做什么?使用单选按钮意味着有一个选择(多选一个),但您提供的模板中没有多项选择设置(我们需要一个单选按钮组:echoecho.com/htmlforms10.htm)。
  • 是的 - 只想要其中之一。这是从 1 到 10 的评分。当有人选择其中一台收音机时,我想将评分添加到模型中。没问题,问题是按钮没有切换
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多