Backbone.js 无法让主干网挑剔地工作(模型扩展不正确)

Backbone.js 无法让主干网挑剔地工作(模型扩展不正确),backbone.js,Backbone.js,我尝试使用主干挑剔,如下例所示: 模型和集合设置 代码执行: 执行时,我获取模型。未定义select()select: 我在这里写了这把小提琴: 这就说明了问题所在:当模型被扩展时,可选择的方面似乎没有被加入进来 我做错了什么?所以,下面是答案 扩展()。。。我用的是Lodash。Lodash的现代构建别名将()扩展为其版本分配()。assign()以不同的方式运行,因此没有使用新属性更新对象(在Picky…)中放入原型中) TL;DR在处理主干时,您需要使用Lodash.underline

我尝试使用主干挑剔,如下例所示:

模型和集合设置

代码执行:

执行时,我获取模型。未定义select()select:

我在这里写了这把小提琴:

这就说明了问题所在:当模型被扩展时,可选择的方面似乎没有被加入进来


我做错了什么?

所以,下面是答案

扩展()。。。我用的是Lodash。Lodash的现代构建别名将()扩展为其版本分配()。assign()以不同的方式运行,因此没有使用新属性更新对象(在Picky…)中放入原型中)

TL;DR在处理主干时,您需要使用Lodash.underline构建(您可能可以进行更具包容性的自定义构建,但从我所看到的情况来看,这是一般要点)

// Backbone.Picky, v0.2.0
// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.
// Distributed under MIT license
// http://github.com/derickbailey/backbone.picky

Backbone.Picky=function(a,b){var c={};c.SingleSelect=function(a)  {this.collection=a},b.extend(c.SingleSelect.prototype,{select:function(a){a&&this.selected===a||(this.deselect(),this.selected=a,this.selected.select(),this.trigger("select:one",a))},deselect:function(a){this.selected&&(a=a||this.selected,this.selected===a&&(this.selected.deselect(),this.trigger("deselect:one",this.selected),delete this.selected))}}),c.MultiSelect=function(a){this.collection=a,this.selected={}},b.extend(c.MultiSelect.prototype,{select:function(a){this.selected[a.cid]||(this.selected[a.cid]=a,a.select(),d(this))},deselect:function(a){this.selected[a.cid]&&(delete this.selected[a.cid],a.deselect(),d(this))},selectAll:function(){this.each(function(a){a.select()}),d(this)},selectNone:function(){0!==this.selectedLength&&(this.each(function(a){a.deselect()}),d(this))},toggleSelectAll:function(){this.selectedLength===this.length?this.selectNone():this.selectAll()}}),c.Selectable=function(a){this.model=a},b.extend(c.Selectable.prototype,{select:function(){this.selected||(this.selected=!0,this.trigger("selected",this),this.collection&&this.collection.select(this))},deselect:function(){this.selected&&(this.selected=!1,this.trigger("deselected",this),this.collection&&this.collection.deselect(this))},toggleSelected:function(){this.selected?this.deselect():this.select()}});var d=function(a){a.selectedLength=b.size(a.selected);var c=a.selectedLength,d=a.length;return c===d?(a.trigger("select:all",a),void 0):0===c?(a.trigger("select:none",a),void 0):c>0&&d>c?(a.trigger("select:some",a),void 0):void 0};return c}(Backbone,_);


console.log(Backbone);
//You'll be able to see Backbone.Picky in there...

//Create a class
var Person = Backbone.Model.extend({
      initialize: function(){
          console.log('pre extend: ', this);
        var selectable = new Backbone.Picky.Selectable(this);
          console.log('selectable: ', selectable);
        _.extend(this, selectable);
          console.log('post extend: ', this);
      }
    });

//create an instance
var james = new Person();

//fire the select function -> select is undefined
james.select();