バックボーンで最初のアプリケーションを実行していますが、イベントをアタッチしようとすると奇妙なことが起こります。
私はこれまでにこのコードを入手しました:
//View for @girl, EDIT action
GirlEditView = Backbone.View.extend({
initialize: function(el, attr) {
this.variables = attr;
console.log(attr);
this.render();
},
render: function() {
var template = _.template( $("#girl_edit").html(), this.variables );
$(this.el).html( template );
$("#edit_girl").modal('show');
}
});
//View for @girl
GirlView = Backbone.View.extend({
initialize: function(el, attr) {
this.variables = attr;
this.render();
},
render: function() {
var template = _.template( $("#girl_template").html(), this.variables );
$(this.el).html( $(this.el).html() + template );
},
events: {
"click p.modify": "modify"
},
modify: function() {
//calls to modify view
new GirlEditView({el : $("#edit_girl")}, this.variables);
}
});
//One girl from the list
Girl = Backbone.Model.extend({
initialize: function() {
this.view = new GirlView({el : $("#content")}, this.attributes );
}
});
//all the girls
Girls = Backbone.Collection.extend({
model: Girl,
});
//do magic!
$(document).ready(function() {
//Underscore template modification
_.templateSettings = {
escape : /\{\[([\s\S]+?)\]\}/g,
evaluate : /\{\[([\s\S]+?)\]\}/g,
interpolate : /\{\{([\s\S]+?)\}\}/g
}
//get initial data and fill the index
var list = [];
$.getJSON('girls.json', function(data) {
list = [];
$.each(data, function(key, val) {
list.push( new Girl(val) );
});
var myGirls = new Girls(list);
console.log( myGirls.models);
});
});
ご覧のように。
私はすべての女の子を保存するためにコレクションを使用しており、データはルビーのRESTAPIから取得されます。
各女の子は新しいモデルインスタンスを作成し、その中にビューインスタンスをアタッチしました。
それが良い習慣かどうかはわかりませんが、それを行うためのより良い方法を考えることはできません。
各ビューは、一意のIDを持つコンテンツを作成します。girl-1girl-2そして続けます。
これで、テンプレートに編集ボタンがあります。私の最初のアイデアは、onclickイベントを攻撃し、編集ビューをトリガーしてレンダリングすることです。
それは期待どおりに機能しています。
これまでの問題は次のとおりです。
イベントがトリガーされると、レンダリングされたビューを「所有」するものではなく、すべてのコレクション(女の子)が編集ビューを起動します。
私の質問は私が間違っていることですか?
どうもありがとう