2011-10-03 44 views

答えて

12

は、ソフトウェア開発の他のすべてのものと同様に、「それは依存する」。

ビューでフォーム入力を使用していて、モデルへの入力からデータを取得する必要がある場合は、データを直接設定します。あなたは、ビジネスロジックと設定、たまたま他のコードをキックオフしている場合、一方

MyView = Backbone.View.extend({ 
    events: { 
    "change #name", "setName" 
    }, 

    setName: function(e){ 
    var val = $(e.currentTarget).val(); 
    this.model.set({name: val}); 
    } 
}); 

:あなたはこのにこのような入力フィールドから「変更」イベントを含む方法で、任意の数を行うことができますモデル内のデータ(実際にはビジネスロジックの一部としてのみ行います)を使用する場合は、モデル上のメソッドを呼び出す必要があります。

"状態マシン"は、これを行うときの良い例です。あるいは、私が書いた画像ギャラリーでは、表示用の画像の選択の周りにいくつかの論理がありました。画像がすでに選択されている場合は、もう一度選択しないでください。ここに示されているように

Image = Backbone.Model.extend({ 
    select: function(){ 
    if (!this.get("selected")){ 
     this.set({selected: true}); 
    } 
    } 
}); 

を、私は私が設定する呼び出しの周りにゼロロジックを持っている場合は、その後、私はどこから直接設定することを、簡単なルールで実行したい:私は私のイメージモデルにメソッドでこのロジックを置きますわたし。モデルに関連するロジックがセットの周りにある場合、それをモデルに入れます。

いずれにしても、データを設定する場合は、setメソッドを使用する必要があります。これをバイパスしてモデルの属性をmodel.attributesに直接設定すると、多くのバックボーンのコードが実行されなくなり、問題が発生する可能性があります。

+0

+1。素晴らしい答え。 –

1

プログラミングスタイルによって異なります。私はいつもそれらを直接設定しました。 Law of Demeterがあなたに響き、オブジェクトの向きになっている場合(Java/Microsoftスタックバックグラウンドの可能性がある場合)、スタイルはゲッター/セッターメソッドを作成することになります。

一方、 "Size is the Enemy"キャンプの場合(私もJeff Atwood's commentsをお勧めします)、モデルデータを直接設定する必要があります(前に思い出したように、私はこのキャンプにいます)。

つまり、Backbone.jsモデルにはすでにゲッターとセッターのメソッド.get.setがあります。 .attributesメンバーを直接操作しないでください。私はあなたがそれから読むべきではないと確信していません、私は今、それを行う傾向があり、まだそれのために問題を実行していない。

関連する問題