私のコントローラーに対して、リストを表示したいアイテムの配列を持つアイテムがあり、アイテムを削除するアクションがあります。
ember.js コレクション ビュー での同様の質問 item-specific actions からほとんどのコードを取得しました。これの大部分は機能し、住所表示は機能し、アイテムはレンダリングされますが、アクションは正しいコンテキストを持っていないように見えるため、削除アクションは実行されません。
コントローラ:
App.EditAddressesController = Em.ArrayController.extend({
temporaryUser: {
firstName: 'Ben',
lastName: 'MacGowan',
addresses: [{
number: '24',
city: 'London'
etc...
}, {
number: '23',
city: 'London'
etc...
}]
}
});
temporaryUser は EmberObject (User モデルに基づく) であり、addresses 配列内の各アイテムは別の EmberObject (Address モデルに基づく) です - これはコードを表示するために単純化されています。
親ビュー:
{{#each address in temporaryUser.addresses}}
{{#view App.AddressView addressBinding="this"}}
{{{address.display}}}
<a {{action deleteAddress target="view"}} class="delete">Delete</a>
{{/view}}
{{/each}}
App.AddressView:
App.AddressView = Ember.View.extend({
tagName: 'li',
address: null,
deleteAddress: function() {
var address = this.get('address'),
controller = this.get('controller'),
currentAddresses = controller.get('temporaryUser.addresses');
if(currentAddresses.length > 1) {
$.each(currentAddresses, function(i) {
if(currentAddresses[i] == address) {
currentAddresses.splice(i, 1);
}
});
}
else {
//Throw error saying user must have at least 1 address
}
}
});