2012-11-28 62 views
1

我有一个多重选择下拉框,我用Backbone呈现。当用户选择或取消选择选项时,我希望这些(de)选择可以通过Backbone异步保存。检测多选骨选状态的选择状态.picky

我发现Backbone.Picky,并认为它可能对我的努力有帮助,但我似乎无法得到它来检测选择。

在我FieldView的下面clicked功能,console.log(this.model.selected);总是写未定义到日志中。为什么?

var Field = Backbone.Model.extend({ 
     initialize: function(){ 
      var selectable = new Backbone.Picky.Selectable(this); 
      _.extend(this, selectable); 
     } 
    }); 

    var FieldView = Backbone.View.extend({ 
     tagName: "option", 

     initialize: function(){ 
      _.bindAll(this, 'render'); 
     }, 
     events: { 
      "click":"clicked" 
     }, 
     clicked: function(e) { 
      var data_type = this.model.get("DATA_TYPE"); 
      console.log(this.model.selected); // why is this undefined? 
      console.log("it's a " + data_type); 
     }, 
     render: function(){ 
      this.$el.attr('value', this.model.get('COLUMN_NAME')).html(this.model.get('display_name')); 
      return this; 
     } 
    }); 

下面是jsfiddle http://jsfiddle.net/EAZCt/2/的更多上下文。

使用Backbone,我如何在多选列表中异步保存选项的选择状态?

回答

2

您的模型对象从未拥有“选定”属性,因为您从不选择模型。我从来没有使用Backbone.Picky但似乎你可以尝试:

var FieldView = Backbone.View.extend({ 
    tagName: "option", 

    initialize: function(){ 
     this.model.on('selected', this.selected, this); 
    }, 
    events: { 
     "click":"clicked" 
    }, 

    clicked: function() { 
     this.model.select(); 
    }, 
    selected: function() { 
     var data_type = this.model.get("DATA_TYPE"); 
     console.log(this.model.selected); 
     console.log("it's a " + data_type); 
    }, 
    render: function(){ 
     this.$el.attr('value', this.model.get('COLUMN_NAME')).html(this.model.get('display_name')); 
     return this; 
    } 
}); 

http://jsfiddle.net/hGEYL/

+0

感谢这个;它确实有帮助。我选择它作为正确的答案,尽管它没有完全工作。为了继续我的项目,我将使用https://github.com/michael/multiselect/,并可能忘记实时保存。 –