Emberjs 是否为复选框提供 selectionBinding 以处理选中/选中的复选框选项。
如果是,该怎么做?
绑定到 的checked
属性Ember.Checkbox
,见http://jsfiddle.net/5pnVg/:
车把:
{{view Ember.Checkbox checkedBinding="App.objController.isChecked" }}
JavaScript:
App.objController = Ember.Object.create({
isChecked: true,
_isCheckedChanged: function(){
var isChecked = this.get('isChecked');
console.log( 'isChecked changed to %@'.fmt(isChecked) );
}.observes('isChecked')
});
好的,所以这有点旧,但我也偶然发现了这个。我将复选框选项传递给数组中的路由模型。问题确实在于实现双向绑定(如果这是目标)。这就是我的做法:
App.ItemEditController = Ember.ObjectController.extend({
isRound: function () {
return ( this.get('model.shapes').find(function(item) { return (item === 'round') }) );
}.property('model.shapes'),
isOval: function () {
return ( this.get('model.shapes').find(function(item) { return (item === 'oval') }) );
}.property('model.shapes'),
isIrregular: function () {
return ( this.get('model.shapes').find(function(item) { return (item === 'irregular') }) );
}.property('model.shapes'),
shapes: function () {
var self = this;
['round','oval','irregular'].map(function(item) {
var shapes = self.get('model.shapes');
shapes = shapes.toArray();
if (self.get('is' + item.capitalize())) {
if (shapes.indexOf(item) < 0)
shapes.push(item);
} else {
if (shapes.indexOf(item) >= 0)
shapes.splice(shapes.indexOf(item),1);
}
self.set('model.shapes', shapes);
});
}.observes('isRound', 'isOval', 'isIrregular')
});
所以在这里我已经设置了属性以根据它们在模型的形状数组中的存在来设置它们自己,并设置一个观察者来检查这些属性以在需要时重置模型的形状数组。现在在 Item 模板中,我们可以像往常一样绑定到形状(不管你怎么做):
Shapes:
{{#each shape in this.shapes}}
<span class="label label-default">{{shape}}</span><br />
{{else}}
No shape selected!
{{/each}}
在 ItemEdit 模板中,我们绑定到编辑控制器的属性:
Shapes:
Round: {{input type="checkbox" checked=isRound}}
Oval: {{input type="checkbox" checked=isOval}}
Irregular: {{input type="checkbox" checked=isIrregular}}
希望这对任何在这种类型的手动双向绑定中苦苦挣扎的人有所帮助,并且您将一次性在模型中获得所有选中的选项。