创建骨干插件

Chr*_*row 4 javascript javascript-framework backbone.js marionette

尝试创建一个"继承" Backbone.Model但仍覆盖该sync方法的主干"插件" .

这是我到目前为止:

Backbone.New_Plugin = {};
Backbone.New_Plugin.Model = Object.create(Backbone.Model);
Backbone.New_Plugin.Model.sync = function(method, model, options){
    alert('Body of sync method');
}
Run Code Online (Sandbox Code Playgroud)

方法:Object.create()直接取自Javascript:The Good Parts:

Object.create = function(o){
    var F = function(){};
    F.prototype = o;
    return new F();
};
Run Code Online (Sandbox Code Playgroud)

我在尝试使用新模型时遇到错误:

var NewModel = Backbone.New_Plugin.Model.extend({});
// Error occurs inside backbone when this line is executed attempting to create a
//   'Model' instance using the new plugin:
var newModelInstance = new NewModel({_pk: 'primary_key'}); 
Run Code Online (Sandbox Code Playgroud)

该错误发生在Backbone 0.9.2的开发版本的第1392行.功能内部inherits():

    Uncaught TypeError: Function.prototype.toString is not generic .

我试图以骨干库Marionette创建新版本的视图的方式创建一个新的插件.看起来我似乎误解了应该这样做的方式.

为骨干创建新插件的好方法是什么?

jac*_*ers 6

你扩展的Backbone.Model方式不是你想要的方式.如果要创建新类型的模型,只需使用extend:

Backbone.New_Plugin.Model = Backbone.Model.extend({
    sync: function(method, model, options){
        alert('Body of sync method');
    }
});

var newModel = Backbone.New_Plugin.Model.extend({
    // custom properties here
});

var newModelInstance = new newModel({_pk: 'primary_key'});
Run Code Online (Sandbox Code Playgroud)

另一方面,Crockford的Object.createpolyfill被认为是过时的,因为(我相信)最近的实现Object.create需要多个参数.此外,您正在使用的特定函数不会延迟到本机Object.create函数(如果存在),但是,您可能刚刚省略了if (typeof Object.create !== 'function')应该包装该函数的语句.