4

メソッドを「継承」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');
}

メソッド:本Javascript: The Good PartsObject.create()から直接取られました:

Object.create = function(o){
    var F = function(){};
    F.prototype = o;
    return new F();
};

新しいモデルを使用しようとするとエラーが発生します:

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'}); 

エラーは、Backbone 0.9.2 の開発バージョンの 1392 行で発生します。関数内inherits()

    キャッチされていない TypeError: Function.prototype.toString is not generic .

Marionetteバックボーン ライブラリがビューの新しいバージョンを作成する方法で、新しいプラグインを作成しようとしています。IT は、これを行う方法を誤解しているようです。

バックボーン用の新しいプラグインを作成する良い方法は何ですか?

4

1 に答える 1

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'});

別の注意として、Crockford のObject.createpolyfill は時代遅れと見なされています。なぜなら (私が思うに) 最近の の実装はObject.create複数の引数を取るからです。また、使用している特定の関数は、ネイティブ関数が存在する場合はそれに従いませんが、その関数をラップObject.createするステートメントを省略しただけかもしれません。if (typeof Object.create !== 'function')

于 2012-08-17T16:55:50.877 に答える