web-dev-qa-db-ja.com

new Backbone.Model()vs Backbone.Model.extend()

私はJSとBackboneが初めてです

これら2つの違いは何ですか?

TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
60
crapthings

基本的な違いがあり、要するに「家のプロジェクトと家自体の違い」と言えます。

熟練したプログラマの場合、 "new Backbone.Model"はオブジェクトインスタンスを返しますが、 "Backbone.Model.extend"はコンストラクタ関数を返します

最初:新しいオブジェクト(つまり家)

var TestModel = new Backbone.Model({ title: "test title" });

構造(メソッドと変数)が別の場所で定義されている新しいオブジェクトを作成します。オブジェクトは、言語の「すべての非ネイティブアイテム」と見なすことができます。「ネイティブアイテム」とは、整数、文字などの基本型を意味します。

中括弧{}には、変数またはメソッドの値を渡します。これは、Tomasz Nurkiewiczが以前に説明したように、コンストラクターと呼ばれます。これは、モデルが他の場所で記述されている新しいオブジェクトを「構築」できるためです。

既知の例を与えるには、次のように書きます。

var myArray = new Array();

これは、別の場所で定義された非ネイティブオブジェクトである新しい配列を作成していることを意味します。あなたはまた書くことができます:

var myArray = new Array([1,2,3,4,5]);

そして、与えられた数字で配列を埋めます。

SECOND:既存のオブジェクトの定義を変更する(i.e。家のプロジェクト)

var TestModel = Backbone.Model.extend({ title: "test title" })

vMに対して非常に単純なことを言います:「デフォルトとして指定したオブジェクトは非常に素晴らしいですが、より多くの関数/プロパティを実装したいです」。したがって、「extend」句を使用して、既存のメソッド/プロパティを追加またはオーバーライドするオブジェクトの定義を変更します。

例: backbone.js の素敵な例は、コレクションのコンパレータ関数によって提供されます。オブジェクトを定義するオブジェクトを拡張すると、「コレクションをソート順に維持するために使用されます」。

例:

myCollection = Backbone.Collection.extend({
    comparator:function(){
        return item.get('name');
    }
});

IN GENERAL

'backboning'(backbone.jsフレームワークを使用して開発)が指定されたオブジェクト(たとえば、View)を次のように拡張する場合に行うことが期待されること:

window.ButtonView = Backbone.View.extend({
    btnText:'nothingByDefault',
    myNewMethod:function(){
       //do whatever you want, maybe do something triggered by an event, for instance
    }
});

次に、コード内の別の場所で、処理するボタンごとに1回使用します。オブジェクトに与えるすべての値を中かっこに含めます

[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});

....お役に立てれば...

77
Daniele B

2番目の場合、TestModelはコンストラクターであり、後で数回使用してモデルのインスタンスを作成できます。

var model = new TestModel();

ただし、titleextendに渡すことには別の意味があります。あなたはおそらく使用する必要があります:

var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});

または、オブジェクトを作成するときにモデル属性を渡します。

var model = new TestModel({ title: "test title" });

一方、最初のケースではTestModelはすでにモデルのインスタンスです(そのため、JavaScriptの命名規則に従うためにtestModelという名前を付ける必要があります)。

var testModel = new Backbone.Model({ title: "test title" })
14