オブジェクトのリストをループしてクリックしたときに、元のオブジェクトにアクセスできるJavaScriptコードを呼び出すリンクを作成するように思えます。
これを行う最も簡単な方法は、テンプレートコンテキストを新しいカスタムビューにバインドすることです。あなたはこのJSFiddleでアクションのすべてを見ることができます:http://jsfiddle.net/67GQb/
テンプレート:
{{#each App.people}}
{{#view App.PersonView contentBinding="this"}}
<a href="#">{{content.fullName}}</a>
{{/view}}
{{/each}}
アプリケーションコード:
App = SC.Application.create();
App.Person = SC.Object.extend({
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
});
App.people = [
App.Person.create({ firstName: "Yehuda", lastName: "Katz" }),
App.Person.create({ firstName: "Tom", lastName: "Dale" })
];
App.PersonView = SC.View.extend({
mouseDown: function() {
// Note that content is bound to the current template
// context in the template above.
var person = this.get('content');
alert(person.get('firstName'));
}
});
言った、我々はこれは少し面倒であることを理解し、そしていくつかのアイデアを持っています今後の数週間で取り組む予定のプロセスをさらに合理化するためのものです。
あなたはのいくつかを示すことができましたあなたのコード。一般に、SC.Viewをカスタムコントロール用にサブクラス化する必要があります。オブジェクトのすべてのプロパティをバインド/観察できます。唯一のことは、常にオブジェクト上で.get/.setを使用する必要があることです。さもなければ、バインディング/観察は機能しません –