1

私の質問は、コレクション内のモデルをどのように更新しますか? これが私がやっていることです。ページの読み込み時に、連絡先のリストを取得します。あるビューでは、これらの連絡先を順不同のリストにリストします。各連絡先をクリックすると、編集フォームが表示されます。連絡先に変更を加えたら、連絡先を保存できます。これにより、変更されたモデルをコレクションに保存するメソッドが表示されます。これをどのように行いますか?バックボーンのドキュメントには update メソッドがありません (または、少なくとも私には表示されません)。これを行う方法を作成しましたが、それが推奨されるバックボーンの方法であるかどうかはわかりません。ここにあります:

        updatePlan : function()
        {
            //unique ID of the model
            var id = $( 'input[ name=id ]' ).val();
            //remove the old model from the collection
            this.collection.remove( this.model );
            //add the updated model to the collection
            this.collection.add( this.model );              

        }

次のような関数があると思います。

        updatePlan : function()
        {
            this.collection.update( this.model );

        }

助けてくれてありがとう

4

2 に答える 2

0

ユーザーが連絡先を編集してモデルを更新できるビューを作成できます。また、モデルは参照によって渡されるため、モデルが属するコレクションでも更新されます。

これが例です。

EditView = Backbone.View.extend({
  events: {
    'change #name': 'nameChanged',
    'change #age': 'ageChanged'
  },
  render: function() {
    //render code
  },
  nameChanged: function() {
    var nameValue = this.$('#name').val();
    this.model.set({ Name : nameValue });
  },
  ageChanged: function() {
    var ageValue = this.$('#age').val();
    this.model.set({ Age : ageValue });
  }
}

そして、編集ビューを作成するときに、コレクションから選択したモデルを渡します

selectedContact = contactCollection.at(0);
var editView = new EditView({ model: contact });
$('#editDiv').html(editView.render().el);

あとは、ユーザーが保存ボタンをクリックしたときにモデルをサーバーに保存するだけです。

$('#saveButton').click(function() {
  selectedContact.save();
});
于 2011-12-16T01:02:37.113 に答える
0

ポールに同意します。コレクション用のビューとモデル用のビューが必要です。モデルのビューを使用すると、モデルを編集でき、保存が正しく反映されるはずです。

ただし、1 つのモデルと 1 つのコレクション (削除して追加した this.model に基づく) を持つビューがあるように見えるので、単一のモデルを表示しているビューがあると思います... 私は :D を想定しています

その後、これを行うことができます。

    updatePlan : function()
    {
        //unique ID of the model
        var id = $( 'input[ name=id ]' ).val();
        this.model.set({id: id});
        this.model.save();
    }

問題は最初の「ロジック」にすぎない可能性があると思います。コレクション内のモデルを編集しません。モデルを編集すると、そのモデルはたまたまコレクションに属しています。そのため、モデルと model.collection の両方に対してイベントが発生します。ID のセットと同様に、Change:id イベントが発生し、モデルのコレクションのいずれかへのバインディングがトリガーされます。

それが役に立てば幸い :)

于 2012-01-16T12:43:07.053 に答える