在Ember之前确认。选择更改

时间:2013-09-15 07:00:07

标签: javascript ember.js

我正在使用Ember.Select视图以使用select。我想当用户想要更改select ember的项目/索引时创建一个确认,所以我使用这种方式:

OlapApp.CubeSelectView = Ember.Select.extend({
contentBinding: "controller.content",
optionValuePath: "content.uniqueName",
optionLabelPath: "content.name",
prompt: "Please select a Cube",
valueBinding: "OlapApp.CubeController.test",
theSelectionChanged: function(e) {
    var userPropmpt = confirm("this operation Delete All of your work");
    if(userPropmpt)
    {
        this.get('controller').setMeasure(e.get('selection').get('uniqueName'));
    }

}.observes('selection')
});

但是当用户更改选择项目时,打开的confrim也会选择项目/索引已更改,但我想在用户按下确认的确定按钮后,选择项目更改时不是谁点击选择。 这是jsbin样本。例如,我尝试在选择中选择“两个”,所以确认打开并问我,但此时选择的值已更改并且剂量等待确认。

1 个答案:

答案 0 :(得分:4)

您可以使用selectionBinding绑定到充当临时持有者的变量,然后当该变化时,您弹出确认。如果用户确认,则将临时值复制到“real”属性中。如果它们取消,则将“real”属性复制回临时变量。

App.IndexController = Ember.ArrayController.extend({
  content:['one','two','three','four','five'],
  selectedValue : 'one', // this is the buffer for the select
  realValue : 'one' // this is the real value
});

App.CubeSelectView = Ember.Select.extend({
  contentBinding:'controller.content',
  selectionBinding : 'controller.selectedValue',
  optionValuePath:'content',
  optionLabelPath:'content',
  change:function(e){
    var userConfirm = confirm("this operation Delete All of your work");
    if(userConfirm){
      this.set('controller.realValue', this.get('selection')); 
    }else{
      this.set('selection', this.get('controller.realValue'));
    }
  }
});

这是一个经过修改的JSBin:http://jsbin.com/igUgEVO/1/edit