Javascript Handlebar/Ember.Checkbox-2个绑定复选框,其中一个复选框为false

Javascript Handlebar/Ember.Checkbox-2个绑定复选框,其中一个复选框为false,javascript,checkbox,ember.js,handlebars.js,Javascript,Checkbox,Ember.js,Handlebars.js,我正在一个应用程序中制作一个RSVP表单,我试图弄清楚如何让两个复选框相互镜像,当一个选中时,另一个不选中。现在,我的方法是将每个复选框绑定到isComing属性,并在上选中一个复选框!我正在写,但它不是那样工作的 以下是我尝试过的: HTML: 这不管用。第一个复选框工作正常,但第二个复选框完全不受影响。显然,!不允许isComing 在jQuery中这样做很简单,我考虑过创建一个computed属性,第二个复选框绑定到该属性,并侦听isComing,但它们看起来不像正确的方法 有没有一个更简

我正在一个应用程序中制作一个RSVP表单,我试图弄清楚如何让两个复选框相互镜像,当一个选中时,另一个不选中。现在,我的方法是将每个复选框绑定到
isComing
属性,并在
上选中一个复选框!我正在写
,但它不是那样工作的

以下是我尝试过的:

HTML:

这不管用。第一个复选框工作正常,但第二个复选框完全不受影响。显然,
!不允许isComing

在jQuery中这样做很简单,我考虑过创建一个computed属性,第二个复选框绑定到该属性,并侦听
isComing
,但它们看起来不像正确的方法


有没有一个更简单的方法来做到这一点与车把或余烬

我认为最好的方法是通过computedProperty。我用叉子叉了你的jsfiddle来展示它是如何工作的。您可以这样编写控制器:

App.ApplicationController = Ember.ObjectController.extend({
    isComing: false,
    isntComing: function(key, value) {
        if (arguments.length == 2) {
            this.set('isComing', !value);
        }
        return !(this.get('isComing'));
    }.property('isComing')
});

我能想到的最好的方法是通过computedProperty。我用叉子叉了你的jsfiddle来展示它是如何工作的。您可以这样编写控制器:

App.ApplicationController = Ember.ObjectController.extend({
    isComing: false,
    isntComing: function(key, value) {
        if (arguments.length == 2) {
            this.set('isComing', !value);
        }
        return !(this.get('isComing'));
    }.property('isComing')
});

车把上没有“非”操纵器这样的东西。您需要将第二个复选框的状态绑定到其他一些属性。可以这样做: 模板

JS


车把上没有“非”操纵器这样的东西。您需要将第二个复选框的状态绑定到其他一些属性。可以这样做: 模板

JS


如果您可以使用单选按钮,那么我将使用这家伙的实现(),简单而干净

App.RadioButton = Ember.View.extend({
    tagName : "input",
    type : "radio",
    attributeBindings : [ "name", "type", "value", "checked:checked:" ],
    click : function() {
        this.set("selection", this.$().val())
    },
    checked : function() {
        return this.get("value") == this.get("selection");   
    }.property()
});


话虽如此,如果你不介意提前检查一个,亚当的答案也一样好。

如果你可以使用单选按钮,那么我会使用这家伙的实现(),简单明了

App.RadioButton = Ember.View.extend({
    tagName : "input",
    type : "radio",
    attributeBindings : [ "name", "type", "value", "checked:checked:" ],
    click : function() {
        this.set("selection", this.$().val())
    },
    checked : function() {
        return this.get("value") == this.get("selection");   
    }.property()
});


话虽如此,如果你不介意提前检查一个,亚当的答案也一样好。

你是故意不使用单选按钮吗?只是好奇不,单选按钮就可以了。我没有使用它,因为它没有余烬版本,但我想写我自己的观点不会太难。你是故意不使用单选按钮吗?只是好奇不,单选按钮就可以了。我没有使用它,因为它没有余烬版本,但我想写我自己的视图不会太难。Petr计算不是双向绑定,更改isNotComing不会禁用isComing@kingpin2k你说得对。谢谢你指出这一点。对不起,我有点误解了这个问题。对于所描述的复选框行为,我同意Adam发布的答案。Petr计算不是双向绑定,更改isNotComing不会禁用isComing@kingpin2k你说得对。谢谢你指出这一点。对不起,我有点误解了这个问题。对于所描述的复选框行为,我同意Adam发布的答案。谢谢!您使用-1作为初始
isComing
值,这与使用
null
相同?是的,我有使用-1的旧习惯,有时会通过QA。我又遇到了一个问题。我的isComing是模型中的一个属性,因为我想保存它。一切都很好,除了在POST请求中没有发送isComing。有没有想过为什么它在模型中并且看起来工作正常,但是没有被发送到服务器?谢谢!您使用-1作为初始
isComing
值,这与使用
null
相同?是的,我有使用-1的旧习惯,有时会通过QA。我又遇到了一个问题。我的isComing是模型中的一个属性,因为我想保存它。一切都很好,除了在POST请求中没有发送isComing。有没有想过为什么它在模型中并且看起来工作正常,但是没有被发送到服务器?谢谢!这非常有效,我没有意识到这些值被传递到了函数中。谢谢!这非常有效,我没有意识到这些值被传递到了函数中。
App.ApplicationController = Ember.ObjectController.extend({
    isComing: false,
    isNotComing: Em.computed.not('isComing')
});
App.RadioButton = Ember.View.extend({
    tagName : "input",
    type : "radio",
    attributeBindings : [ "name", "type", "value", "checked:checked:" ],
    click : function() {
        this.set("selection", this.$().val())
    },
    checked : function() {
        return this.get("value") == this.get("selection");   
    }.property()
});